2016-08-10 76 views
0

我是PDO(來自mysqli)的新手,我一直在尋找幾個小時,似乎無法弄清楚如何將WHERE和IN運算符與PDO預處理語句組合在一起。PHP PDO使用IN和WHERE運算符編寫語句

簡單WHERE(正常工作):

$value1 = 'val1'; 
$value2 = 'val2'; 
$stmt = $pdo->prepare('SELECT * FROM mytable WHERE val1 = ? AND val2 = ?'); 
$stmt->bindParam(1, $value1); 
$stmt->bindParam(2, $value2); 
$stmt->execute(); 

在報表(正常工作)

$myArr = ['NY', 'PARIS', 'ROME']; 
$q = str_repeat('?,', count($myArr) - 1) . '?'; 
$sql = "SELECT * FROM myTable WHERE cities IN ($q)"; 
$stmt = $db->prepare($sql); 
$stmt->execute($myArr); 

結合(不工作):

$value1 = 'val1'; 
$myArr = ['NY', 'PARIS', 'ROME']; 
$q = str_repeat('?,', count($myArr) - 1) . '?'; 
$sql = "SELECT * FROM myTable WHERE column = ? AND cities IN ($q)"; 
$stmt = $db->prepare($sql); 
$stmt->bindParam(1, $value1); 
$stmt->execute($myArr); 

在此先感謝!

+0

什麼是'$ value1'我沒有看到它定義,爲什麼'$ myArr'在執行 – RiggsFolly

+1

使用'→bindParam' **或**'→執行(ARRAY)',而不是兩者。 – mario

+0

'column =?'應該是什麼? –

回答

0

我認爲這是不工作的原因是因爲你同時使用

$stmt->bindParam(1, $value1); $stmt->execute($myArr);

使用數組,並使其工作方法如下:

prepare($sql);

execute($myArr);

$myArr你應該包括任何columns = ?應該是,你可以添加此使用array_unshift()這樣array_unshift($myArr, 'X');http://php.net/manual/en/function.array-unshift.php

數組的開始調用array_unshift()變量$myArr後會有值如下:

[myArr] => Array 
     (
      [0] => X 
      [1] => NY 
      [2] => PARIS 
      [3] => ROME 
     ) 

現在你可以調用PDO的陳述正確:

prepare($sql); 
execute($myArr); 
+0

是的,這正是我正在尋找的。現在完美。謝謝! – cableguy

+0

@cableguy沒問題。快樂的編碼! –