使用pdo获取mysql用户定义的变量

时间:2012-09-03 20:46:09

标签: php mysql pdo

我正在使用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变量中吗? 谢谢

2 个答案:

答案 0 :(得分: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);

你尝试过类似的东西吗?获取修改后的陈述

答案 1 :(得分:0)

正如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();