【问题标题】:hi i have a search code but when i run it it show me error嗨,我有一个搜索代码,但是当我运行它时它显示错误
【发布时间】:2021-01-15 22:04:48
【问题描述】:
<?php  
 include('blog/includes/config.php'); //assuming $db is a database connection, quries can be done 
 using $db->query()

//Post search words
$search = $_GET['search'];

// remove any code from the search term
$search = strip_tags($search);

//No keywords entered.
if ($search == "") {
echo "<p>Opps! You forgot to enter a search term.</p>";
} else {

// perform the search
$result = $db->query("SELECT * FROM blog_posts_seo WHERE MATCH(postTitle) AGAINST(':search*' IN 
BOOLEAN MODE), ['search' => $search]");

 echo "<h3>Search Results</h3>";

echo "<p>you searched for <b>$search</b> there are ".count($results)." matches.</p>";

foreach($results as $row) { 
    echo "<h1>$row->postTitle</h1>";
    echo "<p>$row->desc</p>";
} // close while loop

  } // close else
?>

<form action="search.php" method="get">
<input name="search" type="text" size="20" />
<input type="submit" name="submit" value="Search" />
</form>

当我在输入字段中搜索时,它会显示以下消息: 致命错误:未捕获的 PDOException:SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 /home/takashop/domains/takashop.ir/public_html/search.php:16 的第 1 行的“['search' => پوست]' 附近使用正确的语法跟踪:#0 /home/takashop/domains/takashop.ir/public_html/search.php(16): PDO->query('SELECT * FROM b...') #1 {main} 抛出 /home/takashop /domains/takashop.ir/public_html/search.php 第 16 行

【问题讨论】:

  • 嗯,这是准备好的陈述的良好开端。只是缺少一些陈述。您使用的是 pdo 还是 msqli?
  • 您需要在查询中用引号将$search 括起来。从值返回的字符串没有它。
  • 嗨,谢谢我使用 pdo

标签: php sql search


【解决方案1】:

我没有遵守。可能有一些语法错误。

//Post search words
// remove any code from the search term
$search = trim(strip_tags($_GET['search']));

//No keywords entered.
if (empty($search)) {
  echo "<p>Opps! You forgot to enter a search term.</p>";
} else {

// perform the search
$stmt = $db->prepare('
Select
 * 
From
 blog_posts_seo 
Where
 Match(postTitle) AGAINST(:search* IN BOOLEAN MODE);
');
  $stmt->execute(['search' => $search]);
  echo "<h3>Search Results</h3>";

  echo "<p>you searched for <b>$search</b> there are ".$stmt->rowCount()." matches.</p>";

  while ($row = $stmt->fetch(PDO::FETCH_OBJ)) {  // you don't need the PDO::FETCH_OBJ if it's in your connect statement.
    echo "<h1>$row->postTitle</h1>";
    echo "<p>$row->desc</p>";
  } // close while loop

} // close else

【讨论】:

  • thnx 我测试了你的代码,它显示错误如下:
  • 致命错误:未捕获的 PDOException:SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 /home/takashop/domains/takashop.ir/public_html/search.php:20 的第 6 行的“IN BOOLEAN MODE)”附近使用正确的语法堆栈跟踪:#0 /home/takashop/domains/takashop.ir/public_html/search.php(20): PDOStatement->execute(Array) #1 {main} 抛出 /home/takashop/domains/takashop.ir/public_html/search.php在第 20 行
  • 第 20 行是:$stmt->execute(['search' => $search]);
  • 错误在sql中。它只是报告执行语句。我会在 sql 客户端中手动测试它。 * 对我来说很奇怪。
  • 感谢更改我的代码,它看起来好多了。我希望你能在测试后帮助我。
猜你喜欢
  • 2018-12-09
  • 1970-01-01
  • 1970-01-01
  • 2020-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-14
  • 1970-01-01
相关资源
最近更新 更多