gpt4 book ai didi

php - MySQL:从 INSERT SELECT 获取返回结果

转载 作者:行者123 更新时间:2023-11-29 05:33:04 24 4
gpt4 key购买 nike

我有一个同时插入显式值和 SELECTd 内容的查询。我也在做基本的递增。

INSERT INTO `table` (`myID`, `myVal1`, `myVal2`) SELECT `myID` + 1, 'explValHere', 'otherValThere')
FROM `table` ORDER BY `myID` DESC LIMIT 0,1

我这样做是因为该表有多个 ID,并在特定列内递增。所以我不能像您首先所说的那样使用自动递增和 insert_id。

问题当然是插入不返回选择,但是可以吗?有没有办法运行这个插入查询并返回任何结果?

最佳答案

由于您的查询有一个 LIMIT 1,您可以将“结果”存储在 session/user-defined variable 中.仍然有两个查询但可重入;每个连接都是它自己的 session 。

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
setup($pdo);

$query = "
INSERT INTO tbl1 (myID, myVal1, myVal2)
SELECT @foo:=myID+1, 'val1', 'val2' FROM tbl2 WHERE x=0 LIMIT 1
";
$pdo->exec($query);
foreach( $pdo->query('SELECT @foo as foo') as $row ) {
echo $row['foo'];
}


function setup($pdo) {
$pdo->exec('CREATE TEMPORARY TABLE tbl1 (myID int, myVal1 varchar(16), myVal2 varchar(16))');
$pdo->exec('CREATE TEMPORARY TABLE tbl2 (myID int, x int)');
$pdo->exec('INSERT INTO tbl2 (myID, x) VALUES (1,1),(2,1),(3,0),(4,0),(5,1)');
}

tbl2 中 x=0 的“第一个”记录是 (myID=3,x=0),脚本打印 4

除此之外,存储过程等(据我所知)与 SQLServer 的 OUTPUT 完全不同。或 postgresql 的 RETURNING MySQL 子句。

关于php - MySQL:从 INSERT SELECT 获取返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13067121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com