使用PDO获取MySQL用户定义变量

4

我正在使用PDO,有一个像这样的查询:

$stmt=$db->query("SET @update_id := 0;  
                    UPDATE table SET column = something, id = (SELECT @update_id := id)  
                    WHERE condition  
                    LIMIT 1;   
                    SELECT @update_id;"); 

这个操作应该是更新一行数据并返回其id。
我相信查询语句本身是有效的,因为我在phpmyadmin中运行它,并返回了一个名为@updated_id的列,其值为更新行的id,就像这样:

|   @updated_id    |  
|------------------|   
|  *correct id*    | 

我想获取 @updated_id 的值并将其存储在 PHP 变量中。
我尝试使用 $stmt->fetchColumn();$stmt->fetchColumn();,但是我得到了 SQLSTATE[HY000]: General error
我一直在寻找可行的方法,但是我找不到任何东西。
所以有人知道如何将 @updated_id 的值存储在 PHP 变量中吗?
谢谢。


在phpMyAdmin中执行您的查询。它返回什么?此外,它不应该像这样读取:SET @update_id = 0; - SteAp
正如我所说,它会返回一个名为@updated_id的列,并在其下方显示正确的值。此外,我使用了来自这里的查询https://dev59.com/iXM_5IYBdhLWcg3waSb9#1751282,它似乎是正确的,因为它在phpmyadmin中运行正常。 - Drust
1
也许您需要查看多个行集:http://php.net/manual/en/pdostatement.nextrowset.php - Petah
2个回答

3

正如Petah在评论中建议的那样,您需要遍历每个行集,直到找到想要获取的SELECT语句。

根据您上面的示例,应该可以这样实现:

$stmt=$db->query("SET @update_id := 0;  
                UPDATE table SET column = something, id = (SELECT @update_id := id)  
                WHERE condition  
                LIMIT 1;   
                SELECT @update_id;"); 
$stmt->nextRowset();
$stmt->nextRowset();
$update_id =  $stmt->fetchColumn();

0
<?php
$id = 123;
$query = "UPDATE table SET column = something, id = ? WHERE condition LIMIT 1;"
$st = $db->prepare($query);
$st->execute(array(
 $id
));

$result = $st->fetch(PDO::FETCH_ASSOC);

var_dump($result);

你尝试过像这样的东西吗?获取修改后的语句


抱歉回复晚了。问题是我没有这个ID,我要么在另一个查询中选择该ID并稍后更新它,要么使用问题中编写的查询。 - Drust

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接