我有一個SQL過程,其中使用了一個IN語句。它是這樣的:將一個數組作爲參數傳遞給SQL過程
SELECT * FROM costumers WHERE id IN('1','2','12','14')
我需要做的是在傳遞至IN statment作爲參數,這是在PHP中的數組,值而不是硬編碼。我怎樣才能做到這一點?
我有一個SQL過程,其中使用了一個IN語句。它是這樣的:將一個數組作爲參數傳遞給SQL過程
SELECT * FROM costumers WHERE id IN('1','2','12','14')
我需要做的是在傳遞至IN statment作爲參數,這是在PHP中的數組,值而不是硬編碼。我怎樣才能做到這一點?
這應該做的伎倆
$array = array('1','2','12','14');
SELECT * FROM `costumers` WHERE `id` IN('{$array}');
您可以使用PHP函數Implode
$array = array("1","2","12","14");
$query = "SELECT * FROM costumers WHERE id IN(".implode(', ',$array).")"
嘗試內爆PHP到一個數組,然後插值該字符串到SQL語句:
$arr = array('foo', 'bar', 'baz');
$string = implode(", ", $arr);
SELECT * FROM customers WHERE id in ($string);
你可以在這種情況下崩潰:
$array = array('1','2','12','14');
$ids = "'".implode("','", $array) . "'";
$sql = "SELECT * FROM `costumers` WHERE `id` IN($ids)";
echo $sql;
// SELECT * FROM `costumers` WHERE `id` IN('1','2','12','14')
,或者如果你不希望任何報價:
$ids = implode(",", $array);
使用PHP的join
功能的加入數組的值。
$arr = array(1,2,12,14);
$sql = "SELECT * FROM costumers WHERE id IN(" . join($arr, ',') . ")";
'join'和'implode'實際上是一樣的,我更喜歡'join',但是這裏的其他人似乎更喜歡implode。 (有什麼區別? - [http://stackoverflow.com/questions/17914008/what-is-the-difference-between-implode-join] – davur 2014-09-10 14:09:47
我更喜歡'implode'以便輕鬆區分它與SQL'JOIN'並且它也更容易被識別爲'explode'的補充功能。 – 2014-09-10 14:29:03
有效的理由@ rink.attendant.6。我喜歡的原因是'join'是其他語言(不包括SQL)的此函數的更普遍的名稱,如C#,Perl,Python,Java,Javascript等。 - implode/explode幾乎是PHP獨有的。 – davur 2014-09-11 02:12:32
implode()
是正確的功能,但您還必須注意數據的類型。
如果字段爲數值,這很簡單:
$values = array(1. 2, 5);
$queryPattern = 'SELECT * FROM costumers WHERE id IN(%s)';
$query = sprintf($queryPattern, implode(', ',$values));
但如果它是一個字符串,你必須用單引號和雙引號玩:
$values = array("foo","bar","baz");
$queryPattern = 'SELECT * FROM costumers WHERE id IN("%s")';
$query = sprintf($queryPattern, implode('", "',$values));
只需更換你的單引號封裝變量與對你想要使用的數組鍵的引用$ myarray [0] – Alex 2014-09-10 14:01:16