我正在尝试在我的数据库类中使用更新方法,在那里我可以更新记录。我试图确保我可以在另一个实例中使用该方法,我不必重复编写相同的语句。这是我的代码:
<?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);
时,我遇到了一些错误
问题是我做错了什么?
由于
答案 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绑定表和列名称。