我从 tab1
中选择数据到一个变量,并在另一个更新 tab1
的查询中使用它。目标列 target
是 INT 类型,所以我在设置之前对其进行舍入。
它在 mysql workbench 中运行良好,在 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 ) );
最佳答案
当对用户变量使用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 )));
';
关于php - PDO 中的 Mysql 变量和多个查询。更新查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21081158/