[英]Error to perform a query with SET by PHP on MySQL
我试图执行此查询:
$q = "SET @userId := (SELECT user_id
FROM users
WHERE user_email='$userEmail'
AND user_token='$userToken' );
SELECT stock_name, stock_description, stocks.stock_id, stock_owner_id,
stock_creation_date, stock_last_mod_date, stock_num_item_to_buy,
stock_distance_to_buy, stock_num_allowed_items, tab.user_role
FROM stocks
INNER JOIN
(SELECT stock_id, user_role
FROM user_stock
WHERE user_id = @userID) tab
ON tab.stock_id=stocks.stock_id
WHERE stocks.stock_id='$stockId'
UNION ALL
SELECT * , 'owner' as user_role
FROM stocks
WHERE stock_owner_id=@userId AND stocks.stock_id='$stockId';";
使用:
$mysqli->query ( $q );
但是结果是这个错误:
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 'SELECT stock_name, stock_description, stocks.stock_id,
stock_owner_id, st' at line 5
如果我尝试通过PhpMyAdmin或MySQLWorkbrench使用相同的查询,则一切正常。
...但是通过PHP,我仍然遇到该错误。 我也尝试使用:
$mysqli->multi_query ( $q );
但是结果是相同的(老实说,在这种情况下,我也无法获得错误消息)。
如果我删除了第一部分(变量的SET),那么该查询也可以通过PHP正常运行,我无法理解它是什么!!!
请帮我!
=======================编辑========================== ========================感谢@suchit,我刚刚看到var名称中的错误,但是在纠正错字后还是一样!
我看到如果我使用; 在SQL语句中,PHP与PhpMyAdmin的工作原理不同,在同一查询中,PHP可以正常工作,但是如果我使用mysqli_multi_query,问题仍然存在。
唯一的解决方案是围绕两个不同的查询@Barmar怎么说,谢谢!
我只会添加:mysqli_multi_query有什么用? 我检查了手册,但发现这样做可以进行更多查询,但是为什么对我不起作用?
我已经看到很多关于mysqli::multi_query()
,我不建议您使用它(即使它可以工作,在大多数情况下也似乎没有必要)。 只需将查询分为两个单独的调用即可。
$q1 = "SET @userId := (SELECT user_id
FROM users
WHERE user_email='$userEmail'
AND user_token='$userToken' );";
$q2 = "SELECT stock_name, stock_description, stocks.stock_id, stock_owner_id,
stock_creation_date, stock_last_mod_date, stock_num_item_to_buy,
stock_distance_to_buy, stock_num_allowed_items, tab.user_role
FROM stocks
INNER JOIN
(SELECT stock_id, user_role
FROM user_stock
WHERE user_id = @userID) tab
ON tab.stock_id=stocks.stock_id
WHERE stocks.stock_id='$stockId'
UNION ALL
SELECT * , 'owner' as user_role
FROM stocks
WHERE stock_owner_id=@userId AND stocks.stock_id='$stockId';";
$mysqli->query($q1);
$mysqli->query($q2);
用户定义的变量与数据库连接相关联,而不是与特定的查询调用相关联,因此您可以访问同一连接上一次调用中的变量集。
可能是因为您试图同时运行两个sql查询(SET和SELECT)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.