通过 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 查询的主要内容,如果未能解决你的问题,请参考以下文章