Php 类内PDO准备的语句
我试图在我的数据库类中使用一个更新方法,在这里我可以更新一条记录。我正在努力确保我可以在另一个例子中使用这个方法,我不必重复写同样的语句。这是我的密码:Php 类内PDO准备的语句,php,mysql,pdo,Php,Mysql,Pdo,我试图在我的数据库类中使用一个更新方法,在这里我可以更新一条记录。我正在努力确保我可以在另一个例子中使用这个方法,我不必重复写同样的语句。这是我的密码: <?php require 'init.php'; class Database { private $conn; public function __construct() { try { $this->conn = new PDO('mysql:host=localho
<?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();
您没有正确使用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绑定表和列名。fyi:不,您不能绑定表/列,您可以将它们列为白名单,谢谢,但它不起作用。顺便问一下,请问最好的方法是什么?回复:惠特利斯特@甘达利特里我不知道为什么它不起作用。如果查询中的:value
是字符串,则应该在其周围加引号。你犯了什么错误?至于白名单,我不知道PDO是否内置了类似的东西,但您可以手动执行,只需检查$table
和$key
是否在可接受的值数组中。“如果是字符串,您应该在查询中加引号:value。”-否。执行“更新$table SET$key=':value'其中id=':id”“
是无效的,如果你是这个意思的话。像这样的引号':value'=>$value,
是可以的,只是不在查询本身中。哎呀,我的错又来了。我猜PDO是为您做的。您对$table
和$key
和$value
使用的实际值是什么?另外,告诉我们您得到的实际错误;这很重要。这些是传递的实际值和常量值吗?“admin”、“username”、“golobo”、13
?如果您试图传递一个包含空格、连字符、撇号等的值,或者可能包含空格的值,则会造成问题。您需要将变量包装在backticks`
中,实际上我正试图测试那些值useename,golobo,13
来测试对象@Fred ii你的实际错误是什么?另外,您是否使用错误报告<代码>错误报告(E_全部);ini设置(“显示错误”,1)代码>放在你的开场白之后如果你不告诉我“这么说”的错误是什么,我就帮不了你了,祝你好运。