我正在尝试创建一个foreach循环,该循环会更改两个变量的值。循环的最后一次迭代稍有不同(最后删除了逗号)-我似乎无法使其正常工作。
这是我到目前为止所拥有的
$rego_columns = [
"make",
"model",
"year",
"rego",
];
foreach ($rego_columns as $key => $regcolex) {
if ($key === key($rego_columns)){
$table_values = "'".$record["$regcolex"]."'";
$table_columns = "`.$regcolex.`";
} else {
$table_values = "'".$record["$regcolex"]."',";
$table_columns = "`.$regcolex.`,";
}
}
答案 0 :(得分:1)
由于您正在有效地尝试将$record
映射到您的$rego_columns
,因此建议使用array_map
来检索值。
然后,您可以使用implode
在数组值周围添加环绕引号或反引号。
$rego_columns = [
"make",
"model",
"year",
"rego",
];
$record = ['make' => 'A', 'model' => 'B', 'year' => 'C', 'rego' => 'D'];
$tableValues = array_map(function($r) use ($record) {
return $record[$r];
}, $rego_columns);
$tableColumns = '`' . implode('`,`', $rego_columns) . '`';
$tableValues = '"' . implode('","', $tableValues) . '"';
echo 'INSERT INTO table_name (' . $tableColumns . ') VALUES (' . $tableValues . ')';
结果
INSERT INTO table_name (`make`,`model`,`year`,`rego`) VALUES ("A","B","C","D");
如果由于某种原因需要在表格列值周围包含点,请将implode
更改为:
$tableColumns = '`.' . implode('.`,`.', $rego_columns) . '.`';
$tableValues = '"' . implode('","', $tableValues) . '"';
INSERT INTO table_name (`.make.`,`.model.`,`.year.`,`.rego.`) VALUES ("A","B","C","D")
作为一个旁注,我强烈建议每当对数据库使用可变数据时都使用prepared statements
。并将其映射到占位符。
$tableValues = array_map(function($r) use ($record) {
return $record[$r];
}, $rego_columns);
$placeholders = implode(',', array_fill(0, count($tableValues), '?'));
$tableColumns = '`' . implode('`,`', $rego_columns) . '`';
$query = 'INSERT INTO table_name (' . $tableColumns . ') VALUES(' . $placeholders . ')';
$stmt = $pdo->prepare($query);
$stmt->execute($tableValues);