簡體   English   中英

PHP While循環中的SQL SELECT

[英]SQL SELECT in PHP while loop

我要從中選擇數據的一組表和字段。 我嘗試了以下代碼,但未成功。 任何人都可以向我解釋為什么這行不通,如果可能的話,如何使它行得通。

$fields = "table1.field1, table2.field2, table3.field3, table4.field4";
$tables = "table1, table2, table3, table4";
$table = explode(', ', $tables); //explode the tables string
$field = explode(', ', $fields); //explode the fields string


$i=1;
while ($i<=4) { 
$sql = 'SELECT ' . $field[$i] . ' FROM ' . $table[$i] . ' WHERE ' . $field[$i] . ' LIKE "%' . $str . '%";';
$results = $readConn->query($sql);
$i++;
var_dump($results);
}

我可以看到兩件事:

1)您忘記了SELECT關鍵字:

$sql = 'SELECT ' .  $field[$i] . ' FROM ' ...etc...

2)在SQL中,字符串應使用單引號而不是雙引號轉義。 結果應類似於LIKE '%foo%'而不是LIKE "%foo%"

您在生成的查詢中缺少SELECT關鍵字。 如果打印出$ sql,則很明顯是問題所在。 順便說一句,根據$ str的來源,您可能容易遭受SQL注入攻擊,除非您正確地逃避了它。

您正在創建的SQL如下所示:

SELECT table2.field2 FROM table2 WHERE table2.field2 LIKE "%%";
SELECT table3.field3 FROM table3 WHERE table3.field3 LIKE "%%";
SELECT table4.field4 FROM table4 WHERE table4.field4 LIKE "%%";
SELECT  FROM  WHERE  LIKE "%%";

我不知道您將$ str設置為什么,所以這里沒有包含它。 SQL應該運行,看起來不錯,除了最后一個...您需要將循環調整為<4,而不是<= 4

您確定與數據庫的連接有效嗎? 您返回的是NULL還是結果或錯誤?

同樣,馬克答案中的第二項。 另外,就我個人而言,我發現它更具可讀性。

$sql = sprintf("SELECT %s FROM %s WHERE %s LIKE '%%s%'", $field[$i], $table[$i], $field[$i], $str);

比這個

$sql = 'SELECT ' . $field[$i] . ' FROM ' . $table[$i] . ' WHERE ' . $field[$i] . ' LIKE "%' . $str . '%";';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM