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 に答える