Я пытаюсь создать цикл 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.`,";
}
}
какие результаты вы получаете сейчас по сравнению с желаемыми? Определите «не работает».
$ table_columns и $ table_values используются в запросе на вставку mySQL. В настоящее время вставка не получает никаких записей.
Эти струны `.make.` и т. д. Выглядят неправильно. Кроме того, здесь наверняка поможет привязка подготовленного оператора PDO
Если это также проблема, связанная с базой данных, как вы указали в комментарий выше, тогда правильные теги и код должны быть включены в вопрос, IMHO (<edit).
Похоже, что сюжет сгущается, как бы @Phil Интересно, что ОП тоже думает о вашем ответе. Я проголосовал за то, что это неясно, и разместил комментарий чуть выше.






Поскольку вы эффективно пытаетесь сопоставить $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) . '"';
Результаты в: https://3v4l.org/1DI76
INSERT INTO table_name (`.make.`,`.model.`,`.year.`,`.rego.`) VALUES ("A","B","C","D")
В качестве примечания я настоятельно рекомендую использовать prepared statements всякий раз, когда используются переменные данные с базой данных. И применяем это для сопоставления значений с заполнителями.
Пример https://3v4l.org/kcl4m
$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);
рассмотрите возможность использования цикла
forи используйте индекс