PHP搜索MySQL数据库致命错误

时间:2018-08-22 18:38:58

标签: php mysql search

我用android studio和PHP编写了查询系统。

我的PHP代码如下。使用Web浏览器打开但出现错误。错误消息如下

注意:未定义索引:第5行的C:\ xampp \ htdocs \ client \ beetle_search.php中的searchQuery

  

致命错误:消息未捕获的异常“ PDOException”   'SQLSTATE [42000]:语法错误或访问冲突:1064您有一个   您的SQL语法错误;检查与您的手册相对应的手册   MariaDB服务器版本可在'表1附近使用正确的语法,其中   MATCH(name,scientific_name)AGAINST(NULL)'在行1'中   C:\ xampp \ htdocs \ client \ beetle_search.php:9堆栈跟踪:#0   C:\ xampp \ htdocs \ client \ beetle_search.php(9):PDOStatement-> execute()   在第9行的C:\ xampp \ htdocs \ client \ beetle_search.php中抛出1个{main}

   require_once('config.inc.php');
   $search_query=$_POST['searchQuery'];
   $sql = 'SELECT * from table 1 where MATCH(name,scientific_name) AGAINST(:search_query)';
   $statement = $connection->prepare($sql);
   $statement->bindParam(':search_query', $search_query, PDO::PARAM_STR);
   $statement->execute();
   if($statement->rowCount())
      {
         $row_all = $statement->fetchall(PDO::FETCH_ASSOC);
         header('Content-type: application/json');
         echo json_encode($row_all);
      }  
   elseif(!$statement->rowCount())
      {
         echo "no rows";
      }

您在哪里写错了?谢谢

1 个答案:

答案 0 :(得分:0)

您应该在查询中添加一个表名。更新查询

来自

$sql = 'SELECT * from table 1 where MATCH(name,scientific_name) AGAINST(:search_query)';

$sql = 'SELECT * from table_name where MATCH(name,scientific_name) AGAINST(:search_query)';

此外,为了使用MATCH函数,您必须在该列上具有全文本索引。否则,您将收到错误Can't find FULLTEXT index matching the column list'。这个问题的解决方案在下面给出...

假设您正在使用MyISAM引擎,请执行:

ALTER TABLE table_name ADD FULLTEXT(name);
ALTER TABLE table_name ADD FULLTEXT(scientific_name);