Php 对CodeIgniter、SQL中的布尔值调用成员函数result()

Php 对CodeIgniter、SQL中的布尔值调用成员函数result(),php,sql,codeigniter,Php,Sql,Codeigniter,我试图根据搜索关键字查看$data['results']中的数据,但每次都会出现上述致命错误,有人能帮我解决吗。 我的控制器 public function execute_search() { $search_term = $this->input->post('search'); $data['results'] = $this->UserModel->get_results($search_term); print_r($results);

我试图根据搜索关键字查看$data['results']中的数据,但每次都会出现上述致命错误,有人能帮我解决吗。 我的控制器

public function execute_search()
{
    $search_term = $this->input->post('search');
    $data['results'] = $this->UserModel->get_results($search_term);
    print_r($results); die;
    //$this->load->view('search_result',$data);
}
我的模型:

public function get_results($search_term)
{
    //var_dump($search_term);die;
    $this->db->select('*');
    $this->db->from('Competitor_Products');
    $this->db->where('CProduct_Article_Number', $search_term);
    return $this->db->get()->result();
}

您将结果存储在
$data['results']
中并打印
$results

那么它是如何工作的呢? 按如下方式打印
$data['results']

 print_r($data['results']); die;
您可以在视图中使用
$results

从return语句中删除result(),如下所示:

公共函数获取搜索结果($search\u term)
{
//变量转储($search\u term);死;
$this->db->select('*');
$this->db->from('Competitor_Products');
$this->db->where('CProduct\u Article\u Number',$search\u term);
返回$this->db->get();
}

我建议您首先检查以下基本事项,这可能会帮助您

您是否获得了正确的搜索字符串

echo $search_term = $this->input->post('search');
Is
$this->UserModel
是否正确指向模型(遵循文件名约定)

您还可以使用以下内容检查查询是否正确生成


您必须更改打印内容


这可能是因为CI没有正确转义查询的where值。如果不知道
$search\u term
是什么,就很难确定。通过更改这一行,您可以很容易地看出这是否是问题所在

$this->db->where('CProduct_Article_Number', $search_term);
对此

$this->db->where('CProduct_Article_Number', $search_term, FALSE);

这将关闭变量和标识符的转义

我也有类似的问题,但解决方法对我来说很简单。 我知道为时已晚,但我可以帮助其他面临同样问题的人

if($this->db->get() === false){
 return false;
}
return $this->db->get()->result();

我面临着同样的问题,我的应用程序运行良好,直到2天前我开始出现同样的错误。发现查询根本没有返回任何数据,得到了与您提到的相同的错误。不知怎的,我找到了一个对我有效的解决办法。我必须编辑我在CI中使用的mysqli驱动程序

第147行/public_html/system/database/drivers/mysqli/mysqli_driver.php 我更改了下面的代码

            `$this->_mysqli->options(MYSQLI_INIT_COMMAND,
                'SET SESSION sql_mode =
                REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
                @@sql_mode,
                "STRICT_ALL_TABLES,", ""),
                ",STRICT_ALL_TABLES", ""),
                "STRICT_ALL_TABLES", ""),
                "STRICT_TRANS_TABLES,", ""),
                ",STRICT_TRANS_TABLES", ""),
                "STRICT_TRANS_TABLES", "")'
            );`
遵守这一准则

          `$this->_mysqli->options(MYSQLI_INIT_COMMAND,
                'SET SESSION sql_mode =
                REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
                @@sql_mode,
                "ONLY_FULL_GROUP_BY,", ""),
                ",ONLY_FULL_GROUP_BY", ""),
                "ONLY_FULL_GROUP_BY", ""),
                "ONLY_FULL_GROUP_BY,", ""),
                ",ONLY_FULL_GROUP_BY", ""),
                "ONLY_FULL_GROUP_BY", "")'
            );`
并确保在/application/config/folder下的database.php文件中将
striction
设置为
FALSE
。像这样的
'stricon'=>FALSE,

加载模型后忘记传递参数时会出现问题。要加载的模型示例包含已参数化的方法,以便在控制器上执行类似操作

    <?php
class example extends CI_Controller{
public function send(){
    $this->load->model('modelname'); //call the model name
    $this->modelname->methodName($variable); //variable contain data that need to be saved on database
}
}
    ?>

参数化后的方法包含$variable data,以便访问数据库模型,将在此人员上工作。因此,必须对模型的方法进行参数化。例如,您将像这样编写代码

<?php
class modelname extends CI_Model{
    public function methodName($email){
        $this->db->set('password', $this->input->post('npass'));
        $this->db->where('email', $email;
        $query = $this->db->update('test');

        if($query->Result()){
            return true;
        }else{
            return false;
        }
    }
}
}
?>

替换以下行

$search_term = $this->input->post('search');


您还可以在MySQL窗口中使用以下命令进行验证:

mysql> REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''); 
谢谢大家!!和平

其他参考资料:

  • 古拉夫·巴西的回答,20181023T1536
  • breq的答复,20160516T0713;编辑:20180226T0746

  • 您面临的错误是什么?该错误意味着查询失败。@Narf在sql中运行相同的查询以获得完美的结果时,只有在执行中发生错误。在这里,您进行了一系列函数调用;您不能确定您正在执行相同的查询。调用
    get\u compiled\u select()
    获取正在生成的查询。错误。模型应该返回数据,而不是
    CI\u DB\u结果
    实例。@DFriend没有错,只是另一种方法。我能想到的最好的例子是,如果您需要获得say
    result()
    ,以及
    num_rows()
    (通常是必需的)。您不必对结果执行
    count()
    ,只需执行
    $this->users->groups()->num_rows()
    $this->users->groups()->result()
    即可,因为您不必使用单独的函数和db调用来获取
    num_rows
    ,我认为它就像返回一个对象一样可维护。Ion Auth插件for CI广泛地做到了这一点。这是错误的,因为它不是问题的答案。至于我关于模型应该返回结果而不是db连接的断言,我同意这是一个偏好的问题——在一定程度上。Ion_auth_模型广泛地实现了这一点?我想不是。再看看。也许一次。有几次它返回$this,这是不一样的。大多数情况下,它返回bool或void。至于DRY,我想不出有哪一次我需要知道在模型之外检索到的记录数。@StutiRauthan可能您使用的搜索词没有从数据库中得到任何结果。当没有结果时,get()函数给出BOOLEAN FALSE;因此,错误是正确的,当没有返回数据时,您不能对函数调用result(),请删除result(),然后尝试此操作,
    if($this->db->get()->num_rows()>0){return$this->db->get()->result();}否则{die(“未接收到数据”)}
    @romaine,错误消息在这个问题的标题中。首先检查是否有记录$query->num_rows()>0还可以在MySQL窗口中使用以下命令进行验证:REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','');附加参考:;breq的答复,20160516T0713;编辑:20180226T0746
    $search_term = $this->input->post('search');
    
    $search_term = (isset($this->input->post('search')) && !empty($this->input->post('search'))) ? $this->input->post('search') : '';
    
    mysql> REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','');