SQL语句中的PHP变量

时间:2014-02-05 23:04:00

标签: php mysql sql mysqli

我在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,我不知道原因。我以为我做的都很正确。为什么我会收到该错误以及如何预防?

4 个答案:

答案 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)

  1. 你在做什么非常糟糕的风格。考虑以不同的方式做!关于mysqli和参数的提示在这里都是答案和评论。
  2. 没有理由使用for循环并使用count($item)多个UPDATE语句,只需1(一)即可!

    UPDATE members SET item1=value1, item2=value2, ... WHERE ID = ".$_SESSION['id'];
    
  3. 要找到问题的确切原因,我建议您输出$query,看一下并将其添加到您的问题
  4. 问题似乎在于分隔符"'

答案 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']."' ";