PDO中的Mysql变量和多个查询。 UPDATE查询不起作用

时间:2014-01-12 22:35:40

标签: php mysql sql pdo

我从tab1选择数据到变量,并在另一个更新tab1的查询中使用它。目标列target的类型为INT,因此我在其设置之前将其舍入。

它在mysql工作台中运行良好,也没有从php获取错误(error_reporting设置为-1)。它只是没有真正更新目标列 - 它保持为零。

知道为什么吗?

$q = 'SELECT @tmp = ( SELECT t
                      FROM tab1
                      WHERE a_id = :id1 );
      UPDATE tab1
      SET target = ( SELECT ROUND( @tmp / ( SELECT COUNT(*)
                                            FROM tab2
                                            WHERE b_id = :id2 )));
      ';

$sth = $dbh->prepare( $q );
$sth->execute( array( ':id1' => $id, ':id2' => $id ) );

1 个答案:

答案 0 :(得分:0)

SELECT与用户变量一起使用时,我们必须使用不同的分配,即:。一定要将模拟准备设置为true。

$q = 'SELECT @tmp:= ( SELECT t
                  FROM tab1
                  WHERE a_id = :id1 );
      UPDATE tab1
      SET target = ( SELECT ROUND( @tmp / ( SELECT COUNT(*)
                                        FROM tab2
                                        WHERE b_id = :id2 )));
     ';
$sth = DB::query( $q );
var_dump($sth->fetch());
$sth->nextRowset();
var_dump($sth);

但mysql引用http://dev.mysql.com/doc/refman/5.0/en/user-variables.html声明我们应该使用SET设置用户定义的变量

所以在你的情况下:

$q = 'SET @tmp = ( SELECT t
                      FROM tab1
                      WHERE a_id = :id1 );
      UPDATE tab1
      SET target = ( SELECT ROUND( @tmp / ( SELECT COUNT(*)
                                            FROM tab2
                                            WHERE b_id = :id2 )));
      ';