更改代碼如下:
foreach ($arr as $name => $quan) {
$query = "SELECT * FROM table WHERE name='$name'";
$result = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($result) > 0) {
while($row = mysql_fetch_array($result)) {
echo $quan." ".$row['name']. "\n";
}
}
}
你必須通過結果循環。順便說一句,停止使用mysql_query()
!改用MySQLi或PDO(並注意SQL注入;您可以使用mysqli_real_escape_string()
來處理輸入參數)。對於庫MySQLi實現,那就是:
foreach ($arr as $name => $quan) {
$query = "SELECT * FROM table WHERE name='$name'";
$result = mysqli_query($query) or die(mysqli_error());
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_array($result)) {
echo $quan." ".$row['name']. PHP_EOL;
}
}
}
而且相當"\n"
,我更喜歡使用PHP_EOL
(如上圖所示)
而作爲意見認爲,該SQL語句可以執行一次,如如下:
$flipped_array = array_flip($arr); // flip the array to make "name" as values"
for($i = 0; $i < count($flipped_array); $i++) {
$flipped_array[$i] = '\'' . $flipped_array[$i] . '\''; // add surrounding single quotes
}
$name_list = implode(',', $arr);
$query = "SELECT * FROM table WHERE name IN ($name_list)";
// ... omit the followings
eg在$ ARR包含 「彼得」, 「瑪麗」, 「肯」,查詢將是:
SELECT * FROM table WHERE name IN ('peter','mary','ken')
旁註:但我不明白您的查詢。您只能從查詢中獲取名稱?你可以檢查行數,或者你甚至可以按名稱分組,例如:
SELECT name, COUNT(*) AS cnt FROM table GROUP BY name ORDER BY name
得到你想要的。
UPDATE(再次):基於OP的評論,這裏是解決方案:
$flipped_array = array_flip($arr); // flip the array to make "name" as values"
for($i = 0; $i < count($flipped_array); $i++) {
$flipped_array[$i] = '\'' . $flipped_array[$i] . '\''; // add surrounding single quotes
}
$name_list = implode(',', $arr);
$query = "SELECT name, COUNT(*) AS cnt FROM table WHERE name IN ($name_list) GROUP BY name HAVING COUNT(*) > 0 ORDER BY name";
$result = mysqli_query($query) or die(mysqli_error());
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_array($result)) {
echo $quan." ".$row['name']. ": " . $row['cnt'] . PHP_EOL;
}
}
上面的查詢將顯示出現在僅表名。不在表中的名字將不會顯示。現在完整的代碼(再次注意SQL注入)
停止使用'mysql_query()'!改用MySQLi或PDO。 – Raptor 2013-04-30 07:26:40
是指你的編輯,只有那些不存在的數據庫纔會打印出來? – Raptor 2013-04-30 07:42:23
哎呀,不好的例子,沒有注意。固定。 – user1535846 2013-04-30 07:46:43