我是读者PDO
,我想知道这两种方法之间的差别是什么:
public function query($sql)
{
$req = $this->db->prepare($sql);
$req->execute();
return $req->fetchAll(PDO::FETCH_OBJ);
}
public function query($sql, $data = array())
{
$req = $this->db->prepare($sql);
$req->execute($data);
return $req->fetchAll(PDO::FETCH_OBJ);
}
在第二种方法中,execute
有一个空数组作为参数而第一个没有,使用空数组作为execute
的参数有什么作用?
答案 0 :(得分:1)
您可以在数组中添加参数绑定,而不是事先使用bindParam()函数。
例如,你想通过id
选择一些东西 $stmt = $dbh->prepare("SELECT * FROM `something` WHERE `id` = ?");
$stmt->execute(array($id));
与
相同 $stmt = $dbh->prepare("SELECT * FROM `something` WHERE `id` = ?");
$stmt->bindParam(1, $id, PDO::PARAM_INT, 11);
$stmt->execute();
虽然对于bindParam函数你可以更好地检查, 查看PHP Manual PDO::excute()
答案 1 :(得分:1)
默认情况下,该数组仅为空。您可以传递该数组中的值,它们将被适当地插入到您的SQL语句中(即 - array key =>字段名称)。
在函数参数中定义一个空数组,表明这是一个可选参数,并且只有在相关时才强制您传递它。例如,执行INSERT命令时。如果你没有将任何值传递给$data
参数,那么它的默认值将只是一个空数组。
使用默认参数的示例 -
function saySomething($text="Hello World!"){
echo $text;
}
saySomething(); // will echo out the default "Hello World!"
saySomething("Goodbye World!"); // will echo out "Goodbye World!" as specified.
答案 2 :(得分:1)
第一个允许您运行不带参数的查询 第二个允许您使用参数或不使用以下命令运行查询:
$data = $db->query("SELECT * FROM table");
$data = $db->query("SELECT * FROM table WHERE id=?",array($id));
两者都有效。