【发布时间】:2017-01-29 17:21:05
【问题描述】:
我为我的班级创建了一个查询方法,它可以从数据库中获取数据,但是当我开始插入某些内容时它不起作用。
我的查询方法是这样的。
function query($sql, $params = array()) {
$query = $this->_conn->prepare($sql);
if(count($params)) {
$position = 1;
foreach($params as $param) {
$query->bindValue($position, $param);
$position++;
}
}
if($query->execute()) { //error is here based on the error message: SQLSTATE[42000]
$result = $query->fetchAll(PDO::FETCH_ASSOC);
} else {
return false;
}
return $result;
}
当我调用上面的查询时,它出错了。
function insert($table, $data) {
if(count($data)) {
$keys = array_keys($data);
$values = "";
$counter =1;
foreach($data as $field) {
$values .= "?";
if($counter < count($field)) {
$values .= ", ";
}
$counter++;
}
$sql = "INSERT INTO {$table} (`". implode('`, `',$keys) ."`) VALUES {$values}";
if($this->query($sql, $data)) { //calling the method above
return true;
}
}
return false;
}
我认为错误出在查询方法中,它只能用于获取 数据。我怎样才能让它变得灵活(比如同时处理获取和 插入等数据)?
【问题讨论】:
-
UPDATE/INSERT 语句不返回结果集,只是一个状态,即 TRUE(有效)FALSE(无效)
-
PS:以后请给我们看COMPLETE错误信息
-
@RiggsFolly 致命错误:未捕获异常 'PDOException' 并带有消息 'SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 '???' 附近使用的正确语法在 C:\wamp64\www\security\db.php 的第 1 行第 30 行**错误出现在 $query->execute() 部分中的 query() 方法中
-
看起来您缺少参数占位符之间的逗号
-
如果你没有设置
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);,那么在你执行查询之前不会发现错误,因为在你运行->execute()之前,查询实际上不会被发送到数据库进行编译
标签: pdo mysql-error-1064