[英]Suggestions on how to check an array against a database table
這是我所擁有的:
我想做的是:
我真的不是必須使用循環以單獨的查詢方式針對表運行數組中的每個字符串,我想必須有一種更有效的方法來執行此操作。
任何想法,將不勝感激。 我正在使用PHP 5.4.3和MySQL。
只需使用IN子句:-
SELECT somecolumn
FROM someTable
WHERE someCoumn IN ('a string', 'another string', 'etc')
也許在php中做(假設數組已經被轉義為SQL安全):-
$sql = "SELECT somecolumn
FROM someTable
WHERE someCoumn IN ('".implode("','", $someArray)."')";
如果您想計算每個項目(包括0項)中有多少個匹配項,那么類似的方法可能會更好:
<?php
$result = $db->query("CREATE TEMPORARY TABLE CheckValues
(CheckValue varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`CheckValue`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;");
$result = $db->query("INSERT INTO CheckValues (CheckValue) VALUES('".implode("','", $someArray)."')");
$result = $db->query("SELECT CheckValue, COUNT(b.someCoumn) AS someCount
FROM CheckValues a
LEFT OUTER JOIN someTable b ON a.CheckValue = b.someCoumn
GROUP BY CheckValue");
while ($row = $result->fetch_assoc())
{
echo "$row[CheckValue] - $row[someCount] <br />";
}
?>
如其他人所建議,您可以使用IN
子句。 這是一個使用MySQLi
代替mysql_*
的示例,因此您不必擔心轉義和注入。
$criteria=array(/* string-to-search */);
$sql="SELECT * FROM `table` WHERE `column` IN (".implode(",",array_fill(0,count($criteria),"?")).")";
$stmt=$mysqli->prepare($sql);
call_user_func_array(array($stmt,"bind_param"),array_merge(array(str_repeat("s",count($criteria))),$criteria));
$stmt->execute();
$result=$stmt->get_result();
您應該使用MYSQL WHERE IN子句。
用法如下:
SELECT * FROM TABLE_NAME WHERE COLUMN_NAME IN ('.implode(', ', $array).')'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.