SQLite3 :: query():无法准备语句:1,无法识别的标记""

时间:2017-07-07 12:18:20

标签: php search

我正在尝试创建一个PHP搜索查询,用于搜索数据库中的每个单词。但是在提交搜索查询时我收到此错误。

  

警告:SQLite3 :: query():无法准备语句:1,无法识别的令牌:"'%export%"在第107行的C:\ xampp \ htdocs \ xport \ searchresult.php

以下是我的代码。

搜索页面

if (isset($_POST['mainSearch'])) 
{

if (!empty($_POST['mainSearch']))
{
    $searchquery = $_POST['mainSearch'];

    $query = str_replace(" ", "+", $_POST['mainSearch']);
    header("Location: searchresult.php?mainSearch=" . $query);

}

}

显示搜索结果的页面。

if (isset($_GET["mainSearch"])) 
{
  $condition = '';
  $query = explode(" ", $_GET['mainSearch']);

  foreach ($query as $text) 
  {
      $condition .= "question LIKE '%".SQLite3::escapeString($text)."%' OR answer LIKE '%".SQLite3::escapeString($text)."%'";
  }
  $condition = substr($condition, 0, -4);

  $sql_query = "SELECT * FROM questions WHERE " . $condition;
  $result = $db->query($sql_query);

  if ($result)
  {
      while ($row = $result->fetchArray(SQLITE3_ASSOC))
      {
           echo '<div class="quesbox_2">
            <div class="questitle">
                <h2>'.$row["question"].'</h2>
            </div>
            <div class="quesanswer">'.$row["answer"].'</div>
        </div>';
      }
  }
  else
  {

  }
  }

出现此错误的原因是什么。我认为这是因为字符串没有被正确转义,如果这是mysqli_real_escape_string()中我SQLite3的原因(这是我正在使用的数据库)。如果没有,请问我该如何解决这个问题。

3 个答案:

答案 0 :(得分:1)

将子字符串的数量更改为-3
因此,更改

$condition = substr($condition, 0, -4);

到新

$condition = substr($condition, 0, -3);

这应该可以解决问题。

答案 1 :(得分:0)

似乎您的OR子句中需要WHERE条件才能获取与任何单词匹配的所有结果。只需在查询部分的末尾添加OR,就可以了。

foreach ($query as $text) 
{
    $condition .= "question LIKE '%".SQLite3::escapeString($text)."%' OR answer LIKE '%".SQLite3::escapeString($text)."%' OR ";
}
// Will chop 4 characters ' OR ' from end of the string
$condition = substr($condition, 0, -4);

为了使它变得很干净,你可以从参数中检索一次escapeString,以避免在循环中一次又一次地转义它。

$mainSearch = SQLite3::escapeString($_GET['mainSearch']);
$query = explode(" ", $mainSearch);

foreach ($query as $text) 
{
    $condition .= "question LIKE '%$text%' OR answer LIKE '%$text%' OR ";
}
// Will chop 4 characters ' OR ' from end of the string
$condition = substr($condition, 0, -4);

答案 2 :(得分:0)

如果您尝试按每个单词搜索

,请尝试这种方法
string s = "Abc.CDE.EFG";
                string [] n = s.Split('.');
                n[0] = "ZEF";
                string p = string.Join(".",n);
                Console.WriteLine(p);
            }