首页 > 解决方案 > 搜索栏类型错误

问题描述

各位晚安!

传递给 CodeIgniter\Database\BaseBuilder::like() 的 TypeError 参数 2 必须是字符串类型,给定 null,在第 31 行的 D:\xampp\htdocs\lordeCI\app\Controllers\AutocompleteSearch.php 中调用

Codeigniter为下面的代码块抛出此错误,“ titulo ”和“ post_id ”是名为“posts”的表的列名:

public function ajaxSearch()
    {
        helper(['form', 'url']);

        $data = [];

        $db      = \Config\Database::connect();
        $builder = $db->table('posts');   

        $query = $builder->like('titulo', $this->request->getVar('q')) //this is line 31
                    ->select('post_id, titulo as text')
                    ->limit(10)->get();
        $data = $query->getResult();
        
        echo json_encode($data);
    }

此外,一些图像没有正确加载,浏览器给出了一个状态码:200 虽然内容类型是“text/html”,我检查了图像路径并且它是正确的。但是,以下消息显示在开发工具的网络选项卡中。

“DevTools 无法加载 SourceMap:无法加载 chrome-extension://pmncamalnkoafdfdmojmhanhngjaakcb/browser-polyfill.js.map 的内容:HTTP 错误:状态代码 404,net::ERR_UNKNOWN_URL_SCHEME”

标签: phpsqlcodeigniter

解决方案


对于异常

你得到:你正在向q参数传递空值,发生异常是因为它就像调用:$query = $builder->like('titulo', null),这不会发生,只接受字符串作为like方法的第二个参数。

要解决此问题,请在使用之前验证您的参数:

$titulo = '';
if ( ! empty( $titulo ) ) {
    $titulo = $this->request->getVar('q');
}
$query = $builder->like('titulo', $titulo);

更好的方法是通过表单验证

图片问题

您必须检查如何将图像返回给您的客户。如果您直接从 an 返回图像,echo则会出现这种错误。

最好的方法是在您的应用服务器级别解决这个问题。

SourceMap 错误

不是什么大问题,这不会妨碍你的应用。看看这个 StackOverflow 的问题


推荐阅读