2017-08-24 71 views
0

我的搜索SQL當前檢索提交的文本以及多達17個類似的匹配。在表單輸入中輸入多個單詞並從數據庫中檢索相應的數據

我還需要相同的表單輸入來獲取多個單詞(用空格分隔),並通過完全匹配和非相似的方式檢索其相應的數據。

,這是我現在有 -

$word=$_POST['word']; 
$word = explode(" ", $word); 

$searchString = $whereClause = ""; 
foreach($words as $word){ 
$searchString .= " OR word_eng LIKE '%".$word."%'"; 
} 

$whereClause = ($searchString != "") ? " WHERE ".preg_replace('/OR/', 
'', $searchString, 1) : $whereClause; 

$sql = "SELECT word_eng FROM words ".$whereClause." LIMIT 17 "; 

echo $sql; 

$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
while($row = $result->fetch_assoc()) { 
    echo $row["word_eng"]; 
} 

我收到以下錯誤 -

Warning: Invalid argument supplied for foreach() in /home/foneti2/public_html/howjsay/201701/searchResult.php on line 10 

和回聲$ SQL告訴我

SELECT word_eng FROM words LIMIT 17 

這是越來越所有數據庫中我不想要的文字

UPDATE

所以感謝你們我已完成了工作,我需要,但我仍然有一個小問題 - 從他們不是正在被放入相同的順序檢索數據庫中檢索多個單詞時輸入框。有什麼建議麼?

$word=$_POST['word']; 
$word3 = $_POST['word']; 
$word = explode(";", $word); 
$noOfWords = count($word); 
$word2 = $word3; 

if($noOfWords == 1){ 
$searchString = " word_eng LIKE '".$word3."%'"; 

} 
else { 

$searchString = $whereClause = ""; 
foreach($word as $word){ 
$searchString .= " OR word_eng LIKE '".$word."'"; 

echo $word; 
} 

} 

$whereClause = ($searchString != "") ? " WHERE ".preg_replace('/OR/', 
'', $searchString, 1) : $whereClause; 

$sql = "SELECT word_eng FROM words ".$whereClause ." LIMIT 17 "; 

三江源

+0

檢查SQL'IN'子句。您還可以查看參數化查詢。 – bradbury9

+0

編號'IN'在這種情況下不起作用 –

+0

到目前爲止,您已經提出了10個問題。而且,你的10個問題沒有任何明顯的答案。當你問問題時,人們會花費寶貴的時間幫助你擺脫困境。通過標記適當的答案作爲正確答案來獎勵他們而且,我觀察到的是,你沒有**勇氣**回覆/回覆正在幫助你的人。這種行爲在世界任何地方都是不可接受的。 –

回答

0

如果我明白你的意思,你有一個輸入,並希望從該輸入檢索數據。它由用空格分隔的單詞組成。 嘗試是這樣的:

$sql="SELECT word_eng FROM words WHERE word_end LIKE '%" . $word . "%' AND word_end LIKE '%" . $word2 . "%' LIMIT 17"; 

優化它,你可以通過添加一個***爲你的話做一個foreach,用它,你的「更新」你的$ SQL字符串。

和你的foreach後,只需添加你的極限17

+0

嗨,我將如何引用變量$ word2?從輸入字段中的第二個單詞? – sosro

+0

隨着爆炸。 – Protocole

0

正如你在問題中提到,多個單詞之間用空格隔開

<?php 

$words = "Hi All This Is Testing"; 

//The explode() function breaks a string into an array. 
//Since, words are separated by spaces 
$words = explode(" ", $words); 

$searchString = $whereClause = ""; 
foreach($words as $word){ 
    $searchString .= " OR word_eng LIKE '%".$word."%'"; 
} 

$whereClause = ($searchString != "") ? " WHERE ".preg_replace('/OR/', '', $searchString, 1) : $whereClause; 

$sql = "SELECT word_eng FROM words ".$whereClause." LIMIT 17 "; 

echo $sql; 

?> 

案例1:如果$searchString不爲空。

輸出:SELECT word_eng從文字WHERE word_eng LIKE '%你好%' 或word_eng LIKE '%全部%' 或word_eng LIKE '%此%' OR word_eng LIKE '%是%' 或word_eng LIKE「%測試%」 LIMIT 17

案例2:如果$searchString是空的。

輸出:SELECT word_eng FROM詞語LIMIT 17

說明:

使用explode(),所有詞語(以空格分隔)現在存儲在數組中。循環播放每個單詞並附加$searchString。然後,如果$searchString不爲空,則從$searchStringpreg_replace替換第一次出現的OR。

+0

謝謝 - 雖然我收到一些錯誤: – sosro

+0

Warning:explode()[function.explode]:第5行的/home/foneti2/public_html/howjsay/201701/searchResult.php中的空分隔符 – sosro

+0

什麼錯誤? @sosro –

相關問題