gpt4 book ai didi

php - 多行查询时 PDO 获取失败

转载 作者:可可西里 更新时间:2023-11-01 08:31:35 24 4
gpt4 key购买 nike

我认为我对 PDO 的工作原理存在根本性的困惑。我有这个半复杂的多行查询,它向数据库中插入一行,但在完成后我需要插入的 id (aid)。我有另一个函数的类似代码,它工作得很好,但这个函数没有返回任何东西。我得到了 null 的结果。当我在 phpmyadmin 中执行相同的操作时(用测试值替换参数),我得到了预期的 aid 结果。我做错了什么?

function add_list_activity($activity, $lid, $db) 
{
$data = array();

$query = "
INSERT INTO activities
(`name`) VALUES (:activity);

SET @act_id = LAST_INSERT_ID();

INSERT INTO lists_activities
(`aid`, `lid`) VALUES (@act_id, :lid);

SELECT aid FROM activities WHERE aid = @act_id;
";

// The parameter values
$query_params = array(
':activity' => $activity,
':lid' => $lid
);

try
{
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
die("Failed to run query: " . $ex->getMessage());
}
$data = $stmt->fetch();

return $data;
}

谢谢!

最佳答案

没错,你对PDO的prepared statement能力有误解。您一次不能向它传递多个 SQL 语句;您要执行的操作需要四个不同的准备好的语句。

另请注意,您可以通过使用这些语句来简化对 LAST_INSERT_ID() 的使用,每个语句都作为单独的准备语句。

INSERT INTO activities (`name`) VALUES (:activity)

SELECT LAST_INSERT_ID() AS aid

INSERT INTO lists_activities (`aid`, `lid`) VALUES (LAST_INSERT_ID(), :lid)

如果您出于性能原因需要在一个服务器往返中完成所有这些操作,您可以创建一个存储函数来执行此操作。

关于php - 多行查询时 PDO 获取失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24842741/

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