调用mysqli准备 - SQL语法错误

时间:2013-02-07 13:28:24

标签: mysqli prepare

$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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

我认为你会发现execute你的更新得很好。摆脱对query的号召,你应该没事。