首页 > 解决方案 > 我的 SQL 请求在 SQL 中有效,但在 PHP 中无效

问题描述

我正在尝试发出一个独特的请求,以便在我的数据库中插入多个元素,而不是发出多个请求。

这是我的“生成”请求,它在 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 一起使用时这个请求不起作用吗?谢谢 !

标签: phpsqlrequest

解决方案


您有两个变量:$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();

那是; 只有一个变量。这样,您还可以在执行的查询中包含第一位。

请注意,在未来的查询中,数据可能来自用户输入,明智的做法是使用参数绑定


推荐阅读