2014-02-07 51 views
2
$statement = $connection->prepare("INSERT INTO test(emailAddress, password) VALUES(:emailAddress, :password)"); 
$data = array("emailAddress" => "test1", "password" => "test", "abc" => 123); 

if($statement->execute($data)) { 
    echo $connection->lastInsertId(); 
} else { 
    echo "error"; 
} 

我知道令牌的數量超過了所需的數量,但有時我的數組可能會有更多,我需要它們。pdo無效的令牌數量

Invalid parameter number: number of bound variables does not match number of tokens' 

PDO可以忽略額外的參數嗎?

+0

只是想知道,爲什麼你需要這樣做?似乎更快只是註釋掉那個位... – hichris123

+0

,因爲你有一個額外的「abc」=> 123在數組中?嘗試刪除它 – Craftein

+0

我的陣列正在攜帶一些參數從以前的交易以及更多的道路上。 – user2727195

回答

2

不,PDO要求您具有與準備的查詢中的參數數量相同的值數量。

學習使用array_intersect_key()

$keys = array("emailAddress", "password"); 
$data = array("emailAddress" => "test1", "password" => "test", "abc" => 123); 

if($statement->execute(array_intersect_key($data, array_flip($keys)))) { 
    . . . 
+0

嘿,這很漂亮。我必須記住這一個。 – Gohn67

+0

謝謝比爾(除了函數名是array_intersect_key) – user2727195

+0

感謝您指出錯字,我已經修正了上面的錯誤。 –