Foreach с другим финальным циклом

Я пытаюсь создать цикл 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.`,"; 
    }
}

рассмотрите возможность использования цикла for и используйте индекс

Daniel A. White 12.11.2018 01:54

какие результаты вы получаете сейчас по сравнению с желаемыми? Определите «не работает».

Funk Forty Niner 12.11.2018 02:02

$ table_columns и $ table_values ​​используются в запросе на вставку mySQL. В настоящее время вставка не получает никаких записей.

Kashmir96 12.11.2018 02:05

Эти струны `.make.` и т. д. Выглядят неправильно. Кроме того, здесь наверняка поможет привязка подготовленного оператора PDO

Phil 12.11.2018 02:06

Если это также проблема, связанная с базой данных, как вы указали в комментарий выше, тогда правильные теги и код должны быть включены в вопрос, IMHO (<edit).

Funk Forty Niner 12.11.2018 02:11

Похоже, что сюжет сгущается, как бы @Phil Интересно, что ОП тоже думает о вашем ответе. Я проголосовал за то, что это неясно, и разместил комментарий чуть выше.

Funk Forty Niner 12.11.2018 02:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
6
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку вы эффективно пытаетесь сопоставить $record со своим $rego_columns, я предлагаю использовать array_map для получения значений.

Затем вы можете использовать implode для добавления кавычек или обратных кавычек вокруг значений массива.

Пример https://3v4l.org/h70pO

$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);

Другие вопросы по теме