我用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";
}
您在哪里写错了?谢谢
答案 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);