2013-03-17 32 views
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參數的作用是什麼?

+0

人們總是可以傳遞第二個查詢()函數,我無法理解很多從這段代碼的第二個參數... – Prashank 2013-03-17 13:58:19

+0

你閱讀[文檔頁面(HTTP發佈後這個問題。 php.net/manual/en/pdostatement.execute.php)?它列出了該方法的參數。也許有些東西從那裏不清楚? – 2013-03-17 14:00:06

+0

第一個錯誤,第二個錯誤。就這樣。 – 2013-03-17 14:00:46

回答

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

+0

非常感謝:) – 2013-03-17 14:19:48

1

首先一個可以讓你不帶參數運行查詢。
第二個可以讓你要麼參數或不運行查詢:

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

兩個作品。 // WWW:

相關問題