繁体   English   中英

在MySQL上使用PHP通过SET执行查询时出错

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM