2017-08-24 69 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 –

相关问题