php - PDO 中的 Mysql 变量和多个查询。更新查询不起作用

标签 php mysql sql pdo

我从 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/

相关文章:

php - 如何有效地检索大量数据库设置作为 PHP 变量?

php - 图片在我的浏览器中不刷新

php - 定义图像存储位置的最佳实践

java - 使用 JPA 关系映射的 EJB 3 持久性

mysql - sql,获取聚合列表而不是循环

php - 如何使用 RSS 验证 HTML?

MySQL LAST_INSERT_ID 查询

php - 对一组数据的多个请求

sql - SELECT AS 到所有表

mysql - 以编程方式重新排序 SQL 列?