【发布时间】:2017-08-24 13:58:26
【问题描述】:
我的搜索 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
并且 echo $sql 告诉我
SELECT word_eng FROM words LIMIT 17
这是从数据库中获取我不想要的所有单词
更新
感谢你们,我已经让它满足了我的需求,但我仍然有一个小问题 - 从数据库中检索多个单词时,它们的检索顺序与输入框中的顺序不同。有什么建议?
$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 ";
谢谢
【问题讨论】:
-
检查 SQL
IN子句。您还可以查看参数化查询。 -
没有。
IN在这种情况下不起作用 -
到目前为止,您已经提出了 10 个问题。而且,您的 10 个问题没有任何标记答案。当您提出问题时,人们会花费宝贵的时间来帮助您摆脱困境。通过将适当的答案标记为正确答案来奖励他们。而且,我观察到的是,您没有勇气回复/回复帮助您的人。这种行为在世界任何地方都是不可接受的。
-
对不起,娜娜,我正在编辑帖子,我无意冒犯我,我非常感谢您提供的帮助 - 而且我不熟悉标记正确答案,我通常一直在说谢谢现在我知道的评论是正确的
-
再说一遍。我给了你
$words变量。你在 foreach 中写了$word。你期望它如何工作?你也不知道怎么复制。 @sosro。并且,在此之后,I'm getting error 将来自搜索者。 '