Codeigniter查询返回具有空ID的记录。哪一个不可能

时间:2018-08-19 05:47:48

标签: php codeigniter query-builder

我已经很长时间试图解决这个问题了。我试图在stackoverflow,google和其他来源中寻找答案,但是我没有找到可能导致我解决问题的方法。我真的希望你能帮助我。提前致谢。

我正在使用Codeigniter 3

我在codeigniter中的查询如下所示:

  $this->db->select($fields)
        ->from("usuario as u")
        ->join("usuario_info as ui ", "ui.idusuario = u.idusuario","left");
    $this->db->where("usua_url",$this->url_usuario);
    return $this->db->get();  //last line

我确实从查询结果中获取了具有ID(在数据库中为PK且不能为NULL的记录的数据)

我从CI编译的查询是:

SELECT * FROM `usuario` as `u` LEFT JOIN `usuario_info` as `ui` ON `ui`.`idusuario` = `u`.`idusuario` WHERE `usua_url` = 'heri'

在应用result_array方法之后,我得到的结果如下(我检查了一些字段名称及其值。)

array(9) { 
    ["idusuario"]=> NULL 
    ["other_field1"]=> string(9) "censored"                    
    ["other_field2"]=> string(60) "censored" 
    ["other_field3"]=> string(26) "censored"
    ["other_field4"]=> string(19) "censored"                                                         
   `["other_field5"]=> string(7) "censored" 
    ["other_field6"]=> string(4) "censored"             
    ["other_field7"]=> NULL 
    ["other_field"]=> NULL 
 }`

当我将完全相同的查询复制并粘贴到DataGrip或Workbench中时,除idusuario之外,我得到的结果相同,结果如下:

array(9) { 
    ["idusuario"]=> 1 
    ["other_field1"]=> string(9) "censored"                    
    ["other_field2"]=> string(60) "censored" 
    ["other_field3"]=> string(26) "censored"
    ["other_field4"]=> string(19) "censored"                                                         
   `["other_field5"]=> string(7) "censored" 
    ["other_field6"]=> string(4) "censored"             
    ["other_field7"]=> NULL 
    ["other_field"]=> NULL 
 }`

1 个答案:

答案 0 :(得分:0)

在尝试了一些事情之后,我认为对解决方案没有任何影响。

我有类似这样的查询方法:

public function selectPerfilInfo($fields = "*"){
    $this->db->select($fields);
    $this->db->from("usuario as u");
    $this->db->join("usuario_info as ui ", "ui.idusuario = u.idusuario","left");
    $this->db->where("usua_url",$this->url_usuario);
    return $this->db->get();
}

我在控制器中这样称呼它:

//before calling the method I already set the `url_usuario` attribute of my class
$this->my_controller->selectPerfilInfo();

我将上面的行更改为此:

$this->my_controller->selectPerfilInfo("u.idusuario, u.other_field1");

将特定字段传递给函数后,它将返回正确的结果。 我不确定为什么会这样,这使我产生了很多疑问,因为我使用相同的结构从其他表中获取记录没有问题。

如果您能给我任何信息,我将不胜感激。谢谢