PHP/SQL解析错误
不知道我的问题是什么。在第四行,我不断收到一个错误 分析错误:语法错误,意外的T_封装_和_空白, 应为T_字符串、T_变量或T_NUM_字符串 我想它不是4号线,但可能是。我是错过了什么,还是我只是在胡闹PHP/SQL解析错误,php,mysql,Php,Mysql,不知道我的问题是什么。在第四行,我不断收到一个错误 分析错误:语法错误,意外的T_封装_和_空白, 应为T_字符串、T_变量或T_NUM_字符串 我想它不是4号线,但可能是。我是错过了什么,还是我只是在胡闹 $id = $_GET['id']; $query = "UPDATE todo_item2 SET todo = $_POST['i'], percent = $_POST['p']
$id = $_GET['id'];
$query = "UPDATE todo_item2
SET todo = $_POST['i'],
percent = $_POST['p'],
due_date = $date
WHERE todo_id = :id";
$query2 = "UPDATE todo_category2
SET category = $_POST['c']
WHERE todo_id = :id";
$id = $_GET['id'];
$statement1 = $db->prepare($query);
$statement1 -> execute(array(
'id' =>$id,
));
$statement2 = $db->prepare($query2);
$statement2 -> execute(array(
'id' =>$id,
));
带引号键的数组元素需要使用卷曲语法才能正确解析: 以下代码应该可以工作:
$query = "UPDATE todo_item2
SET todo = {$_POST['i']},
percent = {$_POST['p']},
due_date = $date
WHERE todo_id = :id";
$query2 = "UPDATE todo_category2
SET category = {$_POST['c']}
WHERE todo_id = :id";
无论如何,考虑到安全性,在SQL查询中直接使用
$\u POST
数组元素是一个糟糕的主意 用括号封装阵列访问:
因此,将$\u POST['i']
更改为{$\u POST['i']}
:
$id = $_GET['id'];
$query = "UPDATE todo_item2
SET todo = {$_POST['i']},
percent = {$_POST['p']},
due_date = $date
WHERE todo_id = :id";
$query2 = "UPDATE todo_category2
SET category = {$_POST['c']}
WHERE todo_id = :id";
$id = $_GET['id'];
$statement1 = $db->prepare($query);
$statement1 -> execute(array(
'id' =>$id,
));
$statement2 = $db->prepare($query2);
$statement2 -> execute(array(
'id' =>$id,
));
鉴于您已经在使用准备好的语句,您也应该将更新的值移动到绑定参数-
$query = "UPDATE todo_item2
SET todo = :todo,
percent = :percent,
due_date = :date
WHERE todo_id = :id";
$query2 = "UPDATE todo_category2
SET category = :category
WHERE todo_id = :id";
$id = $_GET['id'];
$statement1 = $db->prepare($query);
$statement1 -> execute(array(
'todo' => $_POST['i']
'id' =>$id,
'percent' => $_POST['p'],
'date' => $date
));
$statement2 = $db->prepare($query2);
$statement2 -> execute(array(
'id' =>$id,
'category' => $_POST['c']
));
为什么要正确地准备id而不是其他字段?不要直接在sql字符串中使用传入的用户数据。请制作一个测试用例。问题隔离是调试的基础,您在求助于此处之前似乎没有做过任何操作。将来自$\u POST的数据直接放入SQL查询中,而不应用“转义”,它将尝试执行$\u POST数据中的任何SQL语法,这会导致像你刚刚发现的那样的错误,但更重要的是,这是一个巨大的安全漏洞,通常允许黑客接管你的网站。你真的需要花一点时间来研究这个问题,以确保你做得完全正确。好吧,我没有意识到这是必要的。非常感谢。我的数据在这一点之前被检查,如果它无效,它不会到达这一点,但我会将其更改为更安全的方法。谢谢你的建议!