我为我的类创建了一个查询方法,它可以从数据库中获取数据但是当我开始插入时不起作用。
我的查询方法就是这个。
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;
}
我认为错误在查询方法中,它只能用于获取 数据。我怎样才能使它变得灵活(比如兼顾抓取和抓取) 插入等数据)?
答案 0 :(得分:0)
首先讲述你的功能。这是过度和有限的同时。你真正需要的是
function query($sql, $params = array()) {
$query = $this->_conn->prepare($sql);
$query->execute($params);
return $query;
}
因此,您只需将其称为
即可获得现有功能$db->query($sql)->fetchAll();
但是可以用任何其他类型的查询来调用它,包括删除和插入,更不用说使用命名占位符和位置占位符以及使用其他链接方法,如fetch()或rowCount()
现在给你的错误信息。 显然它与你的功能无关,但你运行的是QUERY。当询问如何重用查询方法来插入查询时,你必须提供一个真正的插入查询,而不是一些带有错误结果的乱码PHP代码。确保您的行为与您的言论相关非常重要。想测试一个插入查询?使用查询,而不是PHP代码!
最后,插入助手。除了明显的语法问题外,它基本上是prone to SQL injection,因此您必须至少转义标识符或更好地将它们列入白名单。