Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL全文连字符和大括号返回错误(最初是:PDO准备的语句没有完成它的工作?)_Php_Mysql_Pdo_Laravel_Full Text Search - Fatal编程技术网

Php MySQL全文连字符和大括号返回错误(最初是:PDO准备的语句没有完成它的工作?)

Php MySQL全文连字符和大括号返回错误(最初是:PDO准备的语句没有完成它的工作?),php,mysql,pdo,laravel,full-text-search,Php,Mysql,Pdo,Laravel,Full Text Search,我更新了这个问题,因为问题出现了令人困惑的新转折。 MySQL没有正确处理连字符或大括号 SELECT * FROM users WHERE MATCH(firstname, lastname, about) AGAINST('-' IN BOOLEAN MODE) 返回 syntax error, unexpected $end 如果我输入(或),也会发生同样的情况。我知道这只是因为输入其他任何东西,比如test都可以正常工作 我使用的是MySQL 5.7.4M ---更新--- 如

我更新了这个问题,因为问题出现了令人困惑的新转折。

MySQL没有正确处理连字符或大括号

SELECT * FROM users WHERE MATCH(firstname, lastname, about) AGAINST('-' IN BOOLEAN MODE) 
返回

syntax error, unexpected $end 

如果我输入
,也会发生同样的情况。我知道这只是因为输入其他任何东西,比如
test
都可以正常工作

我使用的是MySQL 5.7.4M

---更新---
如果我从InnoDB切换到MyISAM,这个错误就会消失。这是InnoDB中相对较新的全文支持的bug吗?


----老问题---
我在基于Laravel和PHP构建的应用程序中实现了一个“搜索用户”功能,并利用MySQL中的
全文搜索。Laravel没有这个函数,我使用了一个基本的
DB::select()
来完成这项工作。问题是,当它使用一个预先准备好的语句时,它的行为就好像它不是(有点)

我的代码:

return DB::select("SELECT * FROM users WHERE MATCH(firstname,lastname,about) AGAINST(? IN BOOLEAN MODE)", array($query));
供那些想知道的人参考,这是
DB::select()
函数

public function select($query, $bindings = array())
    {
        return $this->run($query, $bindings, function($me, $query, $bindings)
        {
            if ($me->pretending()) return array();

            // For select statements, we'll simply execute the query and return an array
            // of the database result set. Each element in the array will be a single
            // row from the database table, and will either be an array or objects.
            $statement = $me->getReadPdo()->prepare($query);

            $statement->execute($me->prepareBindings($bindings));

            return $statement->fetchAll($me->getFetchMode());
        });
    }
但是,如果我输入如下内容:
--
(模拟mysql注入中的注释),则会出现以下错误:

SQLSTATE[42000]: Syntax error or access violation: 1064 syntax error, unexpected '-'

我知道只有这样的东西,因为放入
测试
Hello World
效果非常好。

如果不是你,那就是别人在跟你开玩笑。

但是mysql错误看起来和PHP语法错误一模一样,这是非常明显的

错误消息很难用谷歌搜索到。完成了吗?您不能在控制台中尝试相同的查询,直接将$query内容添加到查询中吗?@YourCommonSense,我已经用一个查询将问题更新到控制台,至少在控制台上有错误的引号screenshot@YourCommonSense使用
test
或任何其他输入成功执行相同的错误引号。这只是windows字体渲染,然后使用稳定的Build。这不是PHP错误,而是MySQL错误:为什么里面有一个美元符号?不知道,但它肯定来自MySQL,而不是PHP。例如,命令行mysql返回它。