2016-11-28 123 views
0

在Adminer了同样的要求没有错误,但在PHP是为什么在将多个查询发送到mysqli_query时发生错误?

您的SQL语法错误;检查手册 对应于您的MariaDB服务器版本的正确语法使用 'SET @lastID = last_insert_id(); INSERT INTO p_messages(letter_id,user_id,messa'at line 1)。

PHP:

$DB->query("INSERT INTO p_letters(user_1_id, user_1_name, create_date) VALUES ('".htmlspecialchars($accountId)."', '".htmlspecialchars($username)."', now()); SET @lastID = LAST_INSERT_ID(); INSERT INTO p_messages(letter_id, user_id, message) VALUES (@lastID, '".htmlspecialchars($accountId)."', '".htmlspecialchars($text)."');"); 

SQL:

INSERT INTO p_letters(user_1_id, user_1_name, create_date) VALUES ('acc583bfa62de6f66.05116379', '212312313', now()); SET @lastID = LAST_INSERT_ID(); INSERT INTO p_messages(letter_id, user_id, message) VALUES (@lastID, 'acc583bfa62de6f66.05116379', 'Проверка'); 
+6

多个SQL语句?每条语句都有一个查询。 – jarlh

+0

使用multi_query()而不是查询() –

+0

multi_query()的作品,谢谢 – Alexey

回答

1

你都应该有独立的API调用运行查询。

$DB->query("INSERT INTO ..."); 
$DB->query("SET @lastID = LAST_INSERT_ID()"); 
$DB->query("INSERT INTO ..."); 

请注意,您实际上并不需要第二个查询,因为LAST_INSERT_ID()可以直接使用。

此外,您不应该使用名为“HTML speacial chars”的函数进行任何数据库交互。您必须改用准备好的语句。

请注意,使用multi_query的建议是不合理的和误导性的,导致很多问题。