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 的列,其中包含更新行的值,如下所示:

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

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

4

2 回答 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();
于 2014-04-09T06:17:28.343 回答
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);

你尝试过这样的事情吗?,获取修改后的语句

于 2012-09-03T23:08:52.070 回答