Php 对CodeIgniter、SQL中的布尔值调用成员函数result()
我试图根据搜索关键字查看$data['results']中的数据,但每次都会出现上述致命错误,有人能帮我解决吗。 我的控制器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);
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没有错,只是另一种方法。我能想到的最好的例子是,如果您需要获得sayresult()
,以及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','');