1

我是关于 的读者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什么?

4

3 回答 3

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()

于 2013-03-17T13:57:39.050 回答
1

默认情况下,该数组仅为空。您可以在该数组中传递值,它们将被适当地插入到您的 SQL 语句中(即 - 数组键 => 字段名称)。

在函数参数中定义一个空数组表明这是一个可选参数,您不必强制传递它 - 只有当它相关时。例如,执行 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. 
于 2013-03-17T13:59:23.993 回答
1

第一个允许您运行不带参数的查询。
第二个允许您使用参数或不使用参数运行查询:

$data = $db->query("SELECT * FROM table"); 
$data = $db->query("SELECT * FROM table WHERE id=?",array($id)); 

两者都有效。

于 2013-03-17T14:07:10.227 回答