我编写了这个PHP脚本来通过表单更新表,但是MySQL给出了这个错误。我该怎么办?我的错误在哪里?
case 'Save Changes':
$note_id=(isset($_POST['note_id'])) ? $_POST['note_id'] : '';
$title=(isset($_POST['title'])) ? $_POST['title'] : '';
$note_text=(isset($_POST['note_text'])) ? $_POST['note_text'] : '';
$color=(isset($_POST['color'])) ? $_POST['color'] : '' ;
$remind_date=(isset($_POST['remind_date'])) ? $_POST['remind_date'] : '' ;
$remind=(isset($_POST['remind'])) ? $_POST['remind'] : '' ;
$user_id=(isset($_POST['user_id'])) ? $_POST['user_id'] : '';
$sql = 'UPDATE nbk_notes SET
title = "' . mysql_real_escape_string($title, $db) . '",
note_text = "' . mysql_real_escape_string($note_text,$db) . '",
color="'.$color.'",
remind_date="'.$remind_date.'",
remind="'.$remind.'",
submit_date = "' . date('Y-m-d H:i:s') . '"
WHERE
note_id = ' . $note_id;
' AND user_id = ' . $user_id;
mysql_query($sql, $db) or die(mysql_error($db));
redirect('memory.php');
break;,这是MySQL错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 9发布于 2014-07-21 16:25:28
问题在于$note_id或$user_id,您有数字值,如果不张贴,您将离开空。试试这个(注意,我修正了你在$note_id之后的一个错误
case 'Save Changes':
$note_id=(isset($_POST['note_id'])) ? $_POST['note_id'] : '';
$title=(isset($_POST['title'])) ? $_POST['title'] : '';
$note_text=(isset($_POST['note_text'])) ? $_POST['note_text'] : '';
$color=(isset($_POST['color'])) ? $_POST['color'] : '' ;
$remind_date=(isset($_POST['remind_date'])) ? $_POST['remind_date'] : '' ;
$remind=(isset($_POST['remind'])) ? $_POST['remind'] : '' ;
$user_id=(isset($_POST['user_id'])) ? $_POST['user_id'] : '';
if($note_id && $user_id) {
$sql = 'UPDATE nbk_notes SET
title = "' . mysql_real_escape_string($title, $db) . '",
note_text = "' . mysql_real_escape_string($note_text,$db) . '",
color="'.$color.'",
remind_date="'.$remind_date.'",
remind="'.$remind.'",
submit_date = "' . date('Y-m-d H:i:s') . '"
WHERE
note_id = ' . $note_id .
' AND user_id = ' . $user_id;
mysql_query($sql, $db) or die(mysql_error($db));
redirect('memory.php');
} else {
echo "No note ID or User ID.";
}
break;还有几点,
发布于 2014-07-21 16:27:00
你在这里有个错误:
note_id = ' . $note_id;
' AND user_id = ' . $user_id;分号应该是一个连接期:
note_id = ' . $note_id .
' AND user_id = ' . $user_id;不过,这并不是SQL错误的原因。最有可能的是,$note_id没有在$_POST中设置,而是被初始化为一个空字符串,这将导致$_POST中的一个错误。如果$note_id应该是字符串,则需要用引号括起来,就像标题、note_text等所做的那样:
note_id = "' . $note_id . '" AND user_id = ' . $user_id;如果它应该是一个整数,您可以将它初始化为0或顶部的什么东西.但是最有可能的是,如果$_POST‘’note_id‘还没有设置,那么您应该重新评估您的逻辑:
if($note_id != '') {
//do my code
} else {
//do some error handling
}对@Majix的更多澄清
代码的第2行如下:
$note_id=(isset($_POST['note_id'])) ? $_POST['note_id'] : '';这意味着"Set $note_id等于通过表单在'note_id‘字段中发布的内容,但是如果没有通过该字段,则将$note_id设置为空(或空白)字符串。当您到达代码的SQL部分时,如果这个$note_id变量是一个空字符串,那么您的SQL将读取(为了清晰起见缩短):
UPDATE nbk_notes SET title = 'Some Title', note_text = 'Text' WHERE note_id =看到=之后什么都没有了吗?SQL抛出一个错误,因为这没有任何意义。note_id =什么?如果note_id应该是一个字符串而不是一个数字,而且您真的想找到一个空的note_id,那么您可能希望您的SQL说:
UPDATE nbk_notes SET title = 'Some Title', note_text = 'Text' WHERE note_id = ''在这里,它知道您正在检查note_id是否等于空字符串。然而,note_id很可能是一个整数,而您的代码的问题是您应该在“note_id”字段中有一个数字,但是无论出于什么原因,您都不需要。
UPDATE nbk_notes SET title = 'Some Title', note_text = 'Text' WHERE note_id = 5但$note_id对你来说不是一个数字。“note_id”要么是作为空字符串通过表单提交的,要么是根本没有通过表单提交,而是在前面的第2行中设置为空字符串。也许您可以发布生成自身的代码,这样我们就可以知道为什么note_id不能正常运行?
尽管如此,我知道您是个初学者,只想让这段代码正常工作,但是您应该阅读第一个注释中发布的链接@esqew,然后迁移到mysql_*函数之外。
发布于 2014-07-21 16:46:54
我重写了您的sql查询:
$sql = "UPDATE nbk_notes SET
title = '". mysql_real_escape_string($title, $db) . "',note_text ='". mysql_real_escape_string($note_text,$db) . "',
color='$color',
remind_date='$remind_date',
remind='$remind',
submit_date = '". date('Y-m-d H:i:s') . "'
WHERE
note_id = '$note_id'
AND user_id = '$user_id'";希望它对你有用!
https://stackoverflow.com/questions/24869762
复制相似问题