尝试插入或更新时,数据库中没有任何内容。这是表格布局
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`thesis_Name` varchar(200) NOT NULL,
`abstract` varchar(200) NOT NULL,
`complete` int(2) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`)
)
如您所见,id 是唯一键。user_id是会话所关注的内容。我希望user_id可以有两行,所以只有id应该是唯一的,因此这应该是在是否插入或更新时寻找的键。这是我一直在使用的:
if (empty($err)) {
$id= mysql_real_escape_string($_POST['id']);
$thesis_Name = mysql_real_escape_string($_POST['thesis_Name']);
$abstract = mysql_real_escape_string($_POST['abstract']);
$user_id = intval($_SESSION['user_id']);
$query = sprintf("
INSERT INTO
`thesis`(`id`,`user_id`, `thesis_Name`, `abstract`)
VALUES
('%s','%s', '%s', '%s')
ON DUPLICATE KEY UPDATE
`thesis_Name` = VALUES(`thesis_Name`),
`abstract` = VALUES(`abstract`)
", $id, $user_id, $thesis_Name, $abstract);
如果没有办法绕过它,那么user_id也可以是唯一的,每个用户只有 1 行
你能给我们看最后一个查询吗?$query = sprintf(...)
之后有这样的东西:
echo $query
也许你$abstract
中的一句简单报价?您可以使用mysql_real_escape_string()
来避免它:
$thesis_Name = mysql_real_escape_string($thesis_Name);
$abstract = mysql_real_escape_string($abstract);
- 要从MySQL获取错误,您必须使用
mysql_error()
函数。 - 您必须转义放置在查询中的字符串。
- 这里没有使用 sprintf()。
.
$user_id = intval($_SESSION['user_id']);
$id = mysql_real_escape_string($_POST['id']);
$thesis_Name = mysql_real_escape_string($_POST['thesis_Name']);
$abstract = mysql_real_escape_string($_POST['abstract']);
$query = "INSERT INTO thesis (id, user_id, thesis_Name, abstract)
VALUES ('$id','$user_id', '$thesis_Name', '$abstract')
ON DUPLICATE KEY UPDATE
`thesis_Name` = VALUES(`thesis_Name`),
`abstract` = VALUES(`abstract`)";
mysql_query($query) or trigger_error(mysql_error()." ".$query);
如果您使用的是 MySQL* 函数。
然而,这是非常不寻常的方法
通常我们根据PHP逻辑决定使用哪个查询,如下所示
if ($_POST['id']) {
$query = "INSERT..."
} else {
$query = "UPDATE..."
}