我从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 ) );
答案 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 )));
';