【问题标题】:Enter multiple words into form input and retrieve corresponding data from database在表单输入中输入多个单词并从数据库中检索相应的数据
【发布时间】: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 将来自搜索者。 '

标签: php jquery sql


【解决方案1】:

如果我理解你的意思,你有一个输入,并想从这个输入中检索数据。它由空格分隔的单词组成。 试试这样的:

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

要优化它,你可以为你的单词做一个 foreach,在其中,你“更新”你的 $sql 字符串,添加一个 AND ***。

在你的 foreach 之后,只需添加你的 LIMIT 17

【讨论】:

  • 嗨,我如何引用变量 $word2?从输入字段中的第二个单词开始?
  • 爆炸。
【解决方案2】:

正如您在问题中提到的,多个单词用空格分隔

<?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 FROM words WHERE word_eng LIKE '%Hi%' OR word_eng LIKE '%All%' OR word_eng LIKE '%This%' OR word_eng LIKE '%Is% ' OR word_eng LIKE '%Testing%' LIMIT 17

案例2:如果$searchString为空。

输出: SELECT word_eng FROM words LIMIT 17

说明:

使用explode(),所有单词(由空格分隔)现在都存储在数组中。循环每个单词并附加$searchString。然后,如果$searchString 不为空,则将第一次出现的 OR 从$searchString 替换为preg_replace

【讨论】:

  • 警告:explode() [function.explode]:第 5 行 /home/foneti2/public_html/howjsay/201701/searchResult.php 中的空分隔符
  • 警告:在第 8 行的 /home/foneti2/public_html/howjsay/201701/searchResult.php 中为 foreach() 提供的参数无效 SELECT word_eng FROM words LIMIT 17
  • 单词是否用空格分隔@sosro?因为,首先,我测试了,然后写了答案。
  • 是的,我想在表单的一个输入字段中输入单词并提交检索
  • 在这一行。 $words = explode(" ", $words);" " 之间留出空格。否则,就会出现那个错误。 " "@sosro 之间没有空格
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-16
  • 1970-01-01
  • 2018-04-22
  • 1970-01-01
  • 2013-12-07
  • 2020-01-29
  • 2019-08-31
相关资源
最近更新 更多