Мой запрос SQL работает в SQL, но не в PHP

avatar
Beko
9 августа 2021 в 07:15
49
1
1

Я пытаюсь сделать уникальный запрос на вставку нескольких элементов в мою базу данных, чтобы не делать несколько запросов.

Вот мой "сгенерированный" запрос, который работает в SQL (проверено в PHPMYADMIN).

INSERT INTO my_table (id, user) VALUES (1,2), (3,4)

Сгенерировано этим кодом.

$query = 'INSERT INTO my_table (id, user) VALUES ';

$data = array(
    array(1, 2),
    array(3, 4)
);

$request = '';

foreach($data as $data)
{
    $request .= '(' . implode(',', $data) . '), ';
}
$request = substr($request, 0, -2);

//Insert in DB
$req = $db->prepare($request);
$req->execute();

Но я получаю эту ошибку в PHP

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1,2), (3,4)' at line 1 in testfonction.php:47 Stack trace: #0 testfonction.php(47): PDO->exec('(1,2), (3,4)') #1 structure_gc.php(32): require('/v...') #2 index.php(22): require('/v...') #3 {main} thrown in testfonction.php on line 47

Знаете ли вы, почему этот запрос не работает, когда я пытаюсь использовать его с PHP? Спасибо !

Источник
jarlh
9 августа 2021 в 07:22
0

Покажите нам окончательный SQL-запрос, который был передан для подготовки.

Ответы (1)

avatar
KIKO Software
9 августа 2021 в 07:22
3

У вас есть две переменные: $request и $query. Предлагаю:

$query = 'INSERT INTO my_table (id, user) VALUES ';

$data = [[1, 2],
         [3, 4]];

foreach($data as $data)
{
    $query .= '(' . implode(',', $data) . '), ';
}

$query = substr($query, 0, -2);

$stmt = $db->prepare($query);
$stmt->execute();

То есть; Всего одна переменная. Таким образом, вы также включаете первый бит в выполняемый вами запрос.

Обратите внимание, что в будущих запросах, где данные потенциально могут поступать из пользовательского ввода, было бы целесообразно использовать привязку параметров.