gpt4 book ai didi

php - 带有准备好的语句的execute() 出现异常

转载 作者:行者123 更新时间:2023-11-29 12:29:55 25 4
gpt4 key购买 nike

这看起来确实是一个简单的任务,但在过去的几个小时里,我把头撞在墙上,并在网上搜索任何线索来解决这个问题,但仍然没有帮助。

错误:

简而言之,我在第一个 execute() 上遇到异常调用内线foreach循环。

Error while execute data (User1, Group1)

exception 'PDOException' with message '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 'group)
VALUES ('User1', 'Group1')' at line 2' in C:\wamp\www\dbo-test-transactions.php:32
Stack trace: #0 C:\wamp\www\dbo-test-transactions.php(32):
PDOStatement->execute(Array) #1 {main}

我用什么?

Windows 上的 WAMP 2.4;数据库主机、用户名和密码具有默认值(“localhost”、“root”和“”)。我创建了数据库 test (排序规则:utf8_general_ci),其中包含表 users (两列 user_namegroup )。两列均为 VARCHAR(50),并且 user_name 列具有 PRIMARY KEY。数据库引擎是InnoDB

enter image description here

我尝试了什么?

我已经尝试使用 query() 直接执行查询和“真正的”mysql 查询,没有事务,而且效果很好。但是当我尝试使用准备好的语句时,它总是失败。另外,我尝试使用不同的方法 bindParam()bindValue()但最终结果总是相同的 - 它抛出异常

已经检查了很多资源,主要是在 StackOverflow 上,PHP.netMySQL.com ,逐字阅读全部内容,检查所有示例、评论等。

相关代码

我的数据库连接已使用这段代码建立。

try {
$pdo = @new PDO("mysql:host=localhost;dbname=test;charset=utf8", "root", "");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
}
catch (PDOException $ex) {
die ("<b>Connection Error!</b><br /><br />{$ex}");
}

我的查询如下所示。

$sql = "INSERT INTO users (user_name, group) VALUES (?, ?)";

我想要插入数据库表的所有数据都存储在一个数组中。

$data = array();
$data[] = array("User1", "Group1");
$data[] = array("User2", "Group2");
$data[] = array("User3", "Group3");

最后,我想做的是:

$pdo->beginTransaction();

$res = $pdo->prepare($sql);
foreach ($data as $values) {
try {
$res->execute($values);
}
catch (PDOException $ex) {
$pdo->rollBack();
die ("<b>Error while execute data ({$values[0]}, {$values[1]})</b><br /><br />{$ex}");
}
}

$pdo->commit();

我确信答案就在代码上方的某个地方,但仍然不知道问题出在哪里。是的,看起来像是初学者的问题,这确实最让我抓狂。

如果您需要更多信息或更新,请告诉我。希望我已经提供了所有相关的代码示例和信息。

最佳答案

找到答案了。根据此链接,解决方案是封装您的字段名称。 PHP PDO Syntax error or access violation: 1064 on insert

在上一个链接中,“desc”是保留关键字。就您而言,“组”是一个保留字。 http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html

试试这个查询:

$sql = "INSERT INTO `users` (`user_name`, `group`) VALUES (?, ?)";

关于php - 带有准备好的语句的execute() 出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27714678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com