【问题标题】:Calling prepare with mysqli - SQL syntax error使用 mysqli 调用准备 - SQL 语法错误
【发布时间】:2013-02-07 13:28:23
【问题描述】:
$q2 = "UPDATE `tasks` SET `title` = ?, task = ?, rules = ?, media = ?, type = ?, xp = ?, available = ?, timestamp = ? WHERE id = ?";
            if ($stmt = $mysqli->prepare($q2)) {
                $stmt->bind_param("sssssissi", $_POST["tasktitle"], $_POST["editor"], $_POST["rules"], serialize($_POST["media"]), $_POST["type"], $_POST["xp"], $a = 0, strtotime("now"), $_GET['id']);
                $stmt->execute();
                $stmt->close();
            }
            $r = $mysqli->query($q2) or die($mysqli->error);

我收到了这个错误消息:

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 '?, task = ?, rules = ?, media = ?, type = ?, xp = ?, available = ?, timestamp = ' at line 1

什么是问题,我该如何解决?

【问题讨论】:

    标签: mysqli prepare


    【解决方案1】:

    我很确定它来自对$mysqli->query() 的调用,它需要一个正确转义的查询(即,没有任何好的安全参数)。这就解释了为什么它在第一个 ? 时抱怨。

    快速检查的方法是实际注释掉整个if 语句,然后检查是否仍然出现错误。如果是这样,您知道这是查询而不是准备好的语句执行。

    我的问题是:你为什么要执行准备好的语句,然后然后试图再次运行它作为查询?

    我想你会发现execute 对你的更新做得很好。摆脱对query 的呼叫,您应该会没事的。

    【讨论】:

    • 第一次使用这个功能。来自这里的代码:stackoverflow.com/questions/2206326/… 如果我注释掉 if(..){ 并且仍然出现 } 错误。
    • @TamásK,我在您链接到的答案中没有看到 query 行。这可能是您从以前的版本中遗留下来的内容。
    • 现在我明白了!谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    相关资源
    最近更新 更多