通过 PHP 使用用户定义的变量运行多个 MySQL 查询

Posted

技术标签:

【中文标题】通过 PHP 使用用户定义的变量运行多个 MySQL 查询【英文标题】:Running multiple MySQL queries with user defined variable through PHP 【发布时间】:2015-02-02 10:38:38 【问题描述】:

我正在尝试运行来自 php 的查询组合。像这样的:

SELECT @rownum:=0; INSERT INTO tbl1 (`myId`, `rank`) (SELECT myId, @rownum:=@rownum+1 FROM `tbl2` WHERE 1 ORDER BY rank DESC)

由于用户定义的 var (@rownum),我必须“一起”运行这些查询。我试过用 mysqli 或 PDO 来做,但似乎都阻止了这个。

我试过的mysqli用法是:

    public function multiQuery($query) 
        if (@parent::multi_query($query)) 
            $i = 0; 
            do  
                $i++; 
             while (@parent::next_result()); 
        
        if (!$result) 
            printf("MySQLi error:<br><b>%s</b><br>%s <br>", $this->error, $query);
        

        return $result;
    

在 PDO 中,我只是希望它可以与 query() 函数一起使用。

我该如何克服这个问题?

【问题讨论】:

您检查了吗:How to execute mysql script with variables using PHP::PDO?? (这可能被认为是重复的) @CharlesRojas 这个问题是 PDO 特有的(我实际上主要讨论 MySQLi),并显示了一个可能导致完全不同的解决方案的特定查询(在没有用户定义的 var 的情况下执行相同的操作)。 因为您的问题是:让两个查询都运行(对于该检查:***.com/a/24853726/2737474),所以也许编辑您的问题以解释真正的目标是什么......以这种方式(我已经理解):将我的 id 从一张表重新排列到另一张表 对于这种情况(据我所知)你所拥有的就是最好的解决方案 【参考方案1】:

这可能会更好:

(将 tbl1.rank 设置为自增)

截断tbl1;

INSERT INTO tbl1 (myId) SELECT myId FROM tbl2 ORDER BY rank DESC;

这是两个独立的命令,但您不必担心变量问题。它没有回答“如何在一个字符串中运行两个不同的命令”或“如何在 PHP 查询中使用变量”的问题,但如果你只是想重新排列事物,那应该可以。

Truncate 将清空 tbl1 并将自动增量值重置回 1

【讨论】:

以上是关于通过 PHP 使用用户定义的变量运行多个 MySQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

PHP中使用的变量

Jmeter教程(二) - 自定义变量模拟多用户

Linux环境变量及其配置实战

PHP运行查询关闭每个数组变量并返回表中的结果

Jmeter-用户定义的变量

环境变量,cp,mv命令详解