PDO Prepared语句在一个类中

时间:2014-09-27 11:25:31

标签: php mysql pdo

我正在尝试在我的数据库类中使用更新方法,在那里我可以更新记录。我试图确保我可以在另一个实例中使用该方法,我不必重复编写相同的语句。这是我的代码:

<?php 
require 'init.php';
class Database {
    private $conn;

    public function __construct() {
        try {
            $this->conn = new PDO('mysql:host=localhost;dbname=school', DB_USER, DB_PASS);
            $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch(PDOException $e) {
            return false;
        }
    }

    public function update($table, $key, $value, $id) {
        $stmt = $this->conn->prepare("UPDATE $table SET $key = $value WHERE id = :id");
        return $stmt->execute(array($key => $value, 'id' => $id));
    }
}
$database = new Database();

我的问题是,当我尝试实例化类$result = $database->update('admin', 'username', 'golobo', 13);时,我遇到了一些错误 问题是我做错了什么?

由于

1 个答案:

答案 0 :(得分:1)

您没有正确使用PDO的绑定功能。您应该执行以下操作:

public function update($table, $key, $value, $id) {
    $stmt = $this->conn->prepare(
        "UPDATE $table SET $key = :value WHERE id = :id"
    );
    return $stmt->execute(array(
        ':value' => $value,
        ':id' => $id
    ));
}

首先,您需要将整个字符串绑定到绑定数组的键中。所以你放':id'而不是'id'。此外,在$table$value的情况下,您将变量直接放入查询中,然后尝试将它们彼此绑定,这没有用。

编辑:无法使用PDO绑定表和列名称。