我在SQL语句中使用变量时收到以下错误:
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 '1 = 86 WHERE ID = 284' at line 1
SQL的代码(在PHP中使用)是:
for($l=0; $l<count($item); $l++) {
$query = "UPDATE members SET item" . $l+1 . " = ".$itemID[$l]." WHERE ID = ".$_SESSION['id'];
$result = $mysqli->query($query) or die($mysqli->error);
}
我知道错误不是来自会话变量,但如果来自l
,我不知道原因。我以为我做的都很正确。为什么我会收到该错误以及如何预防?
答案 0 :(得分:1)
您的查询是在没有正确转义的情况下混合用户数据:
for($l=0; $l<count($item); $l++) {
/* Use sprintf to avoid injecting arbitrary strings into query */
$query = sprintf("UPDATE members SET item%d=? WHERE ID=?", $l + 1);
/* Prepare the statement and bind specific user data values into placeholders */
$stmt = $mysqli->prepare($query);
$stmt->bind_param('is', $itemId[$l], $_SESSION['id']);
/* Execute and get result */
$result = $stmt->execute();
}
or die
模式是处理错误的最糟糕方式。你最好提高异常并抓住可以从中恢复的地方并提供用户友好的消息。
答案 1 :(得分:0)
$query = "UPDATE members SET item" . ($l+1) . " = ".$itemID[$l]." WHERE ID = ".$_SESSION['id'];
答案 2 :(得分:0)
没有理由使用for
循环并使用count($item)
多个UPDATE
语句,只需1(一)即可!
UPDATE members SET item1=value1, item2=value2, ... WHERE ID = ".$_SESSION['id'];
$query
,看一下并将其添加到您的问题。"
和'
。答案 3 :(得分:-1)
试试这个
$query = "UPDATE members SET item'".$l+1."' = '".$itemID[$l]." '
WHERE ID = '".$_SESSION['id']."' ";
或者
$query = "UPDATE members SET item'".$l+1."' = $itemID[$l]
WHERE ID = '".$_SESSION['id']."' ";