我不明白以下两个代码块之间的区别。第一个块比第二个块长,我必须确定$id => PDO::PARAM_INT, $name => PDO::PARAM_STR
的类型。第二是简洁。请帮我理解它们之间的区别。非常感谢你。
$stmt = $db->prepare("SELECT * FROM table WHERE id=:id AND name=:name");
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->bindValue(':name', $name, PDO::PARAM_STR);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
$stmt = $db->prepare("SELECT * FROM table WHERE id=:id AND name=:name");
$stmt->execute(array(':name' => $name, ':id' => $id));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
请让我知道我应该使用什么?我知道上面两个代码块有相同的结果。但是我应该使用哪种方式?
答案 0 :(得分:0)
两者之间的差异主要取决于偏好。将参数放在execute()
调用中是一种较短的方法,可以通过bindValue
明确绑定参数。 bindParam
行为略有不同。请注意,通过execute()
提交的所有变量都被视为字符串,无论如何。
更长方法的优点是你可以强制数据类型 - 这被认为是一种很好的做法 - 并且它还允许更容易的NULL插入。您可以bindParam
在执行前使用变量,因为其值仅在execute()
调用的确切时刻提交。