使用空数组作为执行参数

时间:2013-03-17 13:55:56

标签: php pdo

我是读者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的参数有什么作用?

3 个答案:

答案 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)); 

两者都有效。