Mysqli准备给出错误,即使SQL语句有效?

时间:2012-01-09 20:50:28

标签: php mysql mysqli prepared-statement

我在使用PHP和mySQL进行SQL事务时遇到了一些麻烦。以下是我的发言:

START TRANSACTION;
INSERT INTO listings (title, price, seller, description, time, featured)
              VALUES (?, ?, ?, ?, ?, 0);
SELECT @listingid:=LAST_INSERT_ID();
INSERT INTO pictures (listid, primarypic)
                VALUES (@listingid, 1);
COMMIT;

虽然当我直接使用phpMyAdmin(替换?标记)将此语句设置为正常时,但是当我调用

时它似乎失败了
$stmt = $mysqli->prepare("statement");

将“声明”替换为上述声明。它在到达$ stmt的bind_param之前失败的事实使我相信它不是参数的问题,而是查询。

如果有帮助,这是确切的错误:

  

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第2行的“INSERT INTO列表(标题,价格,卖家,描述,时间,特色)”附近使用正确的语法

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

我认为mysqli不能处理那样的复合语句(特别是因为有一个单独的commit()函数)。您不必在开头START TRANSACTION;而在结尾COMMIT;,而是在查询前$mysqli->autocommit(false);$mysqli->commit();完成后。{/ p>

答案 1 :(得分:1)

问题是你只能“准备”一个SQL语句 - 你试图在这里准备五个SQL语句。

执行所需操作的一种方法是创建存储过程。

来自mysqli_prepare() documentation

  

准备SQL查询,并返回一个语句句柄,用于对语句进行进一步操作。查询必须包含单个SQL语句。