php - 我的 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 一起使用时这个请求不起作用吗?谢谢 !
解决方案
您有两个变量:$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();
那是; 只有一个变量。这样,您还可以在执行的查询中包含第一位。
请注意,在未来的查询中,数据可能来自用户输入,明智的做法是使用参数绑定。
推荐阅读
- java - 如何将 Apache Ignite 基于 Java 的配置转换为 Spring XML 配置?
- rest - Spring Boot Rest API 请求正文(POST)
- ubuntu-18.04 - WSL 中的默认权限和所有权
- javascript - Jest 遇到了一个意外的令牌,Unexpected token export
- reactjs - React Hook useEffect 缺少依赖项:'context'。包括它或删除依赖数组
- mysql - 在 MySQL Workbench 中轮换密码
- java - java - 如何根据Java Netbeans中的项目类型在两个表之间减去数量?
- javascript - 将按钮链接到 SweetAlert 中的另一个页面
- arrays - 在“pytorch”中跨张量广播
- r - R - 多次调用 dplyr::crossing() - 我可以简化吗?