Функция запроса вставки базы данных для любого количества столбцов, любого количества значений и любой таблицы ⇐ Php
Функция запроса вставки базы данных для любого количества столбцов, любого количества значений и любой таблицы
Я пытаюсь создать код на PHP для подачи в базу данных любого количества столбцов и содержимого базы данных. Для этого я просто предоставляю необходимые столбцы базы данных в виде строки ($columnNames) и массива со значениями. Он многомерен, потому что при вставке SQL-запроса после набора данных скобка закрывается, а затем также начинается новый набор данных в скобках. С помощью многомерного массива я могу добавить эти скобки после каждого набора данных и удалить ненужные запятые. Строка, которую я вывожу с помощью var_dump, пока выглядит хорошо. Почему он не интерпретирует строку так, как должен? Я также просто ввожу текст заполнителя и могу также указать жестко закодированные значения. Почему я не могу сделать все это с помощью веревки. Это только потому, что это строка? Я вряд ли вижу другой способ использования строки. Потому что к массиву необходимо получить доступ вручную. Я не могу создать цикл foreach в середине функции выполнения... Как я могу еще передать ему необходимые данные?
Моя версия PHP: 8.2.4
В любом случае. Я получаю эту ошибку, и все попытки ее исправить пока не увенчались успехом:
Неустранимая ошибка: Uncaught PDOException: SQLSTATE[HY093]: неверный номер параметра: количество связанных переменных не соответствует количеству токенов в C:\xampp\htdocs\united-for-eternity\pages\processing\database -dump-process.php:179 Трассировка стека: #0 C:\xampp\htdocs\united-for-eternity\pages\processing\database-dump-process.php(179): PDOStatement->execute(Array) #1 C:\xampp\htdocs\united-for-eternity\pages\processing\database-dump-process.php(143): Database_dump('', 'denomination_id...', Array, Object(PDO)) #2 C :\xampp\htdocs\united-for-eternity\main.php(111): include_once('C:\\xampp\\htdocs...') #3 {main} брошен в C:\xampp\htdocs\united -for-eternity\pages\processing\database-dump-process.php в строке 179 Я посчитал. Он имеет правильное количество границ. Не знаю, почему это не работает.
функция генерироватьRandomString($length = 10) { $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $randomString = substr(str_shuffle($characters), 0, $length); вернуть $randomString; } $columnNames = 'столбец1, столбец2, столбец3'; //Массив значений, который я хочу вставить в базу данных $columnValuesArr = [ 1 => [ 1, 'тестовое значение', 1 ], 2 => [ 2, 'моё значение', 1 ], ]; $tableName = ''; InsertData($tableName, $columnNames, $columnValuesArr, $conn); function InsertData ($tableName, $columnNames,$columnValuesArr, $conn) { $я = 0; $columnValues = '('; $columnValuesExecute = '('; $columnNamesArr = взорвать(',', $columnNames); конец ($ ColumnValuesArr); //выбираем ключ последнего элемента массива. $lastElementKey = ключ ($columnValuesArr); foreach ($columnValuesArr as $columnKey => $columnValueDatasets) { foreach ($columnValueDatasets as &$columnValue) { $placeholder = ':' . $columnNamesArr[$i] . генерироватьRandomString(10); $placeholder = preg_replace('/\s+/', '', $placeholder); $columnValues .= $placeholder . ','; если (is_numeric($columnValue)) { $columnValuesExecute .= "'" . $заполнитель. "'" . " => " . $columnValue. ","; } еще { $columnValuesExecute .= "'" . $заполнитель. "'" . " => " . "'" . $columnValue. "',"; } $я++; } $columnValues = rtrim($columnValues, ','); если ($columnKey == $lastElementKey) { $columnValues .= ')'; } еще { $columnValues .= '),('; } $я = 0; } //rtrim удален слишком сильно. Поэтому я попробовал другой способ удаления ненужных запятых и скобок. $columnValuesExecute = preg_replace('/\,$/','',$columnValuesExecute); $columnValuesExecute = preg_replace('/^\(/','',$columnValuesExecute); var_dump($columnValues, $columnValuesExecute); $result = $conn->prepare('INSERT INTO ' . $tableName . ' (' . $columnNames . ') ЦЕННОСТИ ' . $columnValues); $result->execute([$columnValuesExecute]); }
Я пытаюсь создать код на PHP для подачи в базу данных любого количества столбцов и содержимого базы данных. Для этого я просто предоставляю необходимые столбцы базы данных в виде строки ($columnNames) и массива со значениями. Он многомерен, потому что при вставке SQL-запроса после набора данных скобка закрывается, а затем также начинается новый набор данных в скобках. С помощью многомерного массива я могу добавить эти скобки после каждого набора данных и удалить ненужные запятые. Строка, которую я вывожу с помощью var_dump, пока выглядит хорошо. Почему он не интерпретирует строку так, как должен? Я также просто ввожу текст заполнителя и могу также указать жестко закодированные значения. Почему я не могу сделать все это с помощью веревки. Это только потому, что это строка? Я вряд ли вижу другой способ использования строки. Потому что к массиву необходимо получить доступ вручную. Я не могу создать цикл foreach в середине функции выполнения... Как я могу еще передать ему необходимые данные?
Моя версия PHP: 8.2.4
В любом случае. Я получаю эту ошибку, и все попытки ее исправить пока не увенчались успехом:
Неустранимая ошибка: Uncaught PDOException: SQLSTATE[HY093]: неверный номер параметра: количество связанных переменных не соответствует количеству токенов в C:\xampp\htdocs\united-for-eternity\pages\processing\database -dump-process.php:179 Трассировка стека: #0 C:\xampp\htdocs\united-for-eternity\pages\processing\database-dump-process.php(179): PDOStatement->execute(Array) #1 C:\xampp\htdocs\united-for-eternity\pages\processing\database-dump-process.php(143): Database_dump('', 'denomination_id...', Array, Object(PDO)) #2 C :\xampp\htdocs\united-for-eternity\main.php(111): include_once('C:\\xampp\\htdocs...') #3 {main} брошен в C:\xampp\htdocs\united -for-eternity\pages\processing\database-dump-process.php в строке 179 Я посчитал. Он имеет правильное количество границ. Не знаю, почему это не работает.
функция генерироватьRandomString($length = 10) { $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $randomString = substr(str_shuffle($characters), 0, $length); вернуть $randomString; } $columnNames = 'столбец1, столбец2, столбец3'; //Массив значений, который я хочу вставить в базу данных $columnValuesArr = [ 1 => [ 1, 'тестовое значение', 1 ], 2 => [ 2, 'моё значение', 1 ], ]; $tableName = ''; InsertData($tableName, $columnNames, $columnValuesArr, $conn); function InsertData ($tableName, $columnNames,$columnValuesArr, $conn) { $я = 0; $columnValues = '('; $columnValuesExecute = '('; $columnNamesArr = взорвать(',', $columnNames); конец ($ ColumnValuesArr); //выбираем ключ последнего элемента массива. $lastElementKey = ключ ($columnValuesArr); foreach ($columnValuesArr as $columnKey => $columnValueDatasets) { foreach ($columnValueDatasets as &$columnValue) { $placeholder = ':' . $columnNamesArr[$i] . генерироватьRandomString(10); $placeholder = preg_replace('/\s+/', '', $placeholder); $columnValues .= $placeholder . ','; если (is_numeric($columnValue)) { $columnValuesExecute .= "'" . $заполнитель. "'" . " => " . $columnValue. ","; } еще { $columnValuesExecute .= "'" . $заполнитель. "'" . " => " . "'" . $columnValue. "',"; } $я++; } $columnValues = rtrim($columnValues, ','); если ($columnKey == $lastElementKey) { $columnValues .= ')'; } еще { $columnValues .= '),('; } $я = 0; } //rtrim удален слишком сильно. Поэтому я попробовал другой способ удаления ненужных запятых и скобок. $columnValuesExecute = preg_replace('/\,$/','',$columnValuesExecute); $columnValuesExecute = preg_replace('/^\(/','',$columnValuesExecute); var_dump($columnValues, $columnValuesExecute); $result = $conn->prepare('INSERT INTO ' . $tableName . ' (' . $columnNames . ') ЦЕННОСТИ ' . $columnValues); $result->execute([$columnValuesExecute]); }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение