准备好的陈述是正确的吗?

时间:2015-09-16 12:07:52

标签: php prepared-statement

我在项目中使用预准备语句时遇到问题。我已经创建了一个名为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;
    }
}

1 个答案:

答案 0 :(得分:1)

您不能在预准备语句中包含字段。但是,您可以使用PDO::quote

插入它
$stmt = $this->connection->prepare("SELECT * FROM $table_name WHERE " . $this->connection->quote($key) . " = :value ORDER BY id DESC");