我在项目中使用预准备语句时遇到问题。我已经创建了一个名为DB的类,在这个类中我有一个名为“where”的函数,在这种形式下它不起作用:
public function where($table_name, $key, $value) {
try {
$stmt = $this->connection->prepare("SELECT * FROM $table_name WHERE :key = :value ORDER BY id DESC");
$stmt->execute(array(":key" => $key, ":value" => $value));
return ($stmt->rowCount() > 0) ? $stmt : false;
} catch(Exception $e) {
return false;
}
}
但当我将函数更改为只使用一个占位符时,它可以工作!为什么会这样?
public function where($table_name, $key, $value) {
try {
$stmt = $this->connection->prepare("SELECT * FROM $table_name WHERE $key = :value ORDER BY id DESC");
$stmt->execute(array(":value" => $value));
return ($stmt->rowCount() > 0) ? $stmt : false;
} catch(Exception $e) {
return false;
}
}
答案 0 :(得分:1)
您不能在预准备语句中包含字段。但是,您可以使用PDO::quote
:
$stmt = $this->connection->prepare("SELECT * FROM $table_name WHERE " . $this->connection->quote($key) . " = :value ORDER BY id DESC");