我已经编写了这个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
答案 0 :(得分:3)
问题在于$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;
其他几点,
答案 1 :(得分:0)
你这里有一个错字:
note_id = ' . $note_id;
' AND user_id = ' . $user_id;
分号应该是一个连锁期:
note_id = ' . $note_id .
' AND user_id = ' . $user_id;
但这不是导致SQL错误的原因。最有可能的是,$ note_id未在$ _POST中设置,并且被初始化为空字符串,这将导致SQL中的错误。如果$ note_id应该是一个字符串,你需要将它括在引号中,就像你为title,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'字段中通过表单的POST发出的内容,但如果没有任何内容通过该字段,请将$ 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'字段中有一个数字,但无论出于何种原因,你都没有。你希望SQL说的是这样的(5只是一个例子):
UPDATE nbk_notes SET title = 'Some Title', note_text = 'Text' WHERE note_id = 5
但是$ note_id对你来说不是一个数字。 'note_id'通过表单作为空字符串提交,或者它根本没有通过表单提交,并且在前面的第2行中被设置为空字符串。也许您可以发布生成自身的代码我们知道为什么note_id没有正确通过?
所有这些都说,我知道你是初学者,只是想让这段代码正常工作,但是你应该阅读第一条评论中发布的链接@esqew并从mysql_ *函数中迁移出来。
答案 2 :(得分:0)
我已经重写了你的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'";
希望它适合你!