我正在使用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,mysqli,pdo,prepared-statement
来源: https://codeday.me/bug/20190530/1182265.html