gpt4 book ai didi

php - 如何在 PDO(或 MySQLi)查询中正确处理关联数组?

转载 作者:可可西里 更新时间:2023-10-31 22:45:50 26 4
gpt4 key购买 nike

我正在为一个项目使用 MySQLi(但可以轻松切换到 PDO,请阅读底部的编辑)。我想要的是能够将关联数组处理为 mysql 查询,而无需手动键入每个键/值对。我知道这可能很简单,但是当涉及到 MySQLi/PDO 时,我仍处于学习过程中。为了清楚说明我的意思,举个例子:

假设我有这个关联数组:

$data = array(
'name' => 'Objective',
'short_name' => 'OB',
'generation' => 1
);

我想要的是创建这样的查询:

UPDATE signals SET ? = ? WHERE sid = '1'

它变成这样的查询(或代替 UPDATE、INSERT、SELECT 等):

UPDATE signals SET
name = 'Objective',
short_name = 'OB',
generation = 1
WHERE sid = '1'

所以基本上我的问题是:MySQLi 或 PDO 本身是否可能?如果可能的话,我该怎么做?我已经阅读了有关执行前准备语句的内容,但我还没有想到。希望有人能帮助我。

编辑:我还处于该项目的早期阶段,所以我也可以使用 PDO,但同样的问题仍然存在。我确实研究了 PDO 和 mysqli,但我也不确定如何使用 PDO 来完成。因此,为了这个问题,我将 PDO 作为标签添加到问题中。

最佳答案

这是一个函数,它将接受一个输入数组并生成一些你可以直接放入查询中的东西,只要你只更新一个表:

function array_to_pdo_params($array) {
$temp = array();
foreach (array_keys($array) as $name) {
$temp[] = "`$name` = ?";
}
return implode(', ', $temp);
}

现在您可以像这样执行 PDO 查询:

// The data
$data = array(
'name' => 'Objective',
'short_name' => 'OB',
'generation' => 1
);

// The parameter for the WHERE clause
$sid = 1;

// Build the query string
$query = "
UPDATE `signals`
SET ".array_to_pdo_params($data)."
WHERE `sid` = ?
";

// Convert the data array to indexed and append the WHERE parameter(s) to it
$queryData = array_values($data);
$queryData[] = $sid;

$stmt = $db->prepare($query); // Obviously add the appropriate error handling

$stmt->execute($queryData);

关于php - 如何在 PDO(或 MySQLi)查询中正确处理关联数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11720450/

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