gpt4 book ai didi

php - 无法执行多个查询

转载 作者:行者123 更新时间:2023-11-29 07:12:52 25 4
gpt4 key购买 nike

我尝试执行多个查询,但出现问题。

$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);

$sql = "
UPDATE tmatria SET par = " . $newpar . ", inde = " . $newinde . " WHERE id =" . $cutid . ";
SELECT * FROM tmatria ORDER BY inde ASC;
SET @i := 0;
UPDATE tmatria SET inde = @i := @i + 1;
";

try {
$db->exec($sql);
}
catch (PDOException $e) {
echo $e->getMessage();
die();
}

我想更新一些列,然后按 inde 列对表进行排序,最后将 inde 值设置为 1 2 3...

我认为行 UPDATE tmatria SET par...SELECT * FROM tmatria ORDER BY inde ASC; 很关键,但看不出有什么问题。

有什么帮助吗?

最佳答案

您对如何使用 SQL 有一些根本性的误解。您执行 SELECT ... ORDER BY,然后您希望以下 UPDATE 遵循相同的顺序。 UPDATE 按照自然顺序对表进行排序,它根本不关注 SELECT 查询。

就编码而言,在一次调用中执行多个 SQL 语句没有必要,也没有好处。 PDO 允许这样做,但这不是一个好习惯。每次调用应执行一条 SQL 语句。只要您使用相同的数据库连接, session 变量@i就会保留其值。

当您想要将 PHP 变量与 SQL 语句组合起来时,也可以使用准备好的查询;不要将 PHP 变量连接到 SQL 字符串中。

try {
$sql = "UPDATE tmatria SET par = ?, inde = ? WHERE id = ?";
$stmt = $db->prepare($sql);
$stmt->execute([$newpar, $newinde, $cutid]);
$sql = "SET @i := 0";
$db->exec($sql);
$sql = "UPDATE tmatria SET inde = @i := @i + 1 ORDER BY inde ASC";
$db->exec($sql);
}
catch (PDOException $e) {
echo $e->getMessage();
die();
}

看起来您还试图在每次更新后对 inde 重新编号,以强制该列具有连续的值。表中的行数越多,这会变得越来越慢,对吧?

您应该重新考虑为什么需要该列具有连续的值。

关于php - 无法执行多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39001676/

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