【问题标题】:CodeIgniter Null result set from Mysql DB query来自 Mysql DB 查询的 CodeIgniter Null 结果集
【发布时间】:2016-10-10 16:23:41
【问题描述】:

我正在将 AWS Ubuntu 12/PHP 4.2/CI 1.3.1 上的现有 CI 项目更新为运行 Ubuntu 16.0.4 LTS/Apache 2.4.18/PHP 7.0.8/MySQL 5.7.15/ 的新 AWS 实例CI 3.1.0。

我可以使用 database.php 中的设置从 mysql 命令行连接和选择数据。我编写了一个非 CI 测试 PHP 页面,该页面也返回正确的结果。模型中的相同查询返回 0 个结果。

我一直在调整设置以使其正常工作。这是 database.php 的当前快照。

$active_group = 'default';
$query_builder = TRUE;
//  'db_debug' => (ENVIRONMENT !== 'production'),

$db['default'] = array(
    'dsn'   => '',
    'hostname' => '127.0.0.1',
    'username' => '****',
    'password' => '****',
    'database' => '****',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => TRUE,
    'db_debug' => FALSE,
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

以下是模型的适用部分:

class User_model extends CI_Model
{
    function __construct()
    {
        parent::__construct();
        log_message("info","User_model class instantiated");
    }

... section omitted ...

    function login($username, $password)
    {
        $this->load->library('encrypt');
        // Get the hash of the entered password to lookup in the database
        //$password_hash = $this->encrypt->sha1($password);  (Removed 10/8/2016 ES SHA1 deprecated)

        $newpassword_hash = $this->encrypt->encode($password);

        $this->db->where('user_name', $username );
        $this->db->or_where('email', $username);

        $query = $this->db->get('users', 1);

        if($query->num_rows == 0){
            log_message("info","User not found");
            return false;
        }
        else
        {
... remainder omitted ...

var_dump($this->db->last_query());

string(107) "SELECT * FROM `users` WHERE `user_name` = 'xxxxxx@gmail.com' OR `email` = 'xxxxxx@gmail.com' LIMIT 1" 

var_dump($query);

object(CI_DB_mysqli_result)#23 (8) { ["conn_id"]=> object(mysqli)#15 (19) { ["affected_rows"]=> int(1) ["client_info"]=> string(79) "mysqlnd 5.0.12-dev - 20150407 - $Id: 241ae00989d1995ffcbbf63d579943635faf9972 $" ["client_version"]=> int(50012) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(60) ["host_info"]=> string(20) "127.0.0.1 via TCP/IP" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(23) "5.7.15-0ubuntu0.16.04.1" ["server_version"]=> int(50715) ["stat"]=> string(138) "Uptime: 229367 Threads: 7 Questions: 1083 Slow queries: 0 Opens: 440 Flush tables: 1 Open tables: 241 Queries per second avg: 0.004" ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(223) ["warning_count"]=> int(0) } ["result_id"]=> object(mysqli_result)#22 (5) { ["current_field"]=> int(0) ["field_count"]=> int(60) ["lengths"]=> NULL ["num_rows"]=> int(1) ["type"]=> int(0) } ["result_array"]=> array(0) { } ["result_object"]=> array(0) { } ["custom_result_object"]=> array(0) { } ["current_row"]=> int(0) ["num_rows"]=> NULL ["row_data"]=> NULL } 

【问题讨论】:

  • 澄清——我通过var_dump验证了参数是否正确,SQL语句符合预期。我不知道还要检查什么来解决问题。

标签: mysql codeigniter


【解决方案1】:

如果你使用$query = $this->db->get('users', 1);这个格式在CI中查询 那么行数将通过以下方式实现:

$this->db->where('user_name', $username );
$this->db->or_where('email', $username);
$query = $this->db->get('users')->result_array();

        if(count($query) == 0){
            log_message("info","User not found");
            return false;
        }
       else{
            //do what you want
        }

否则你可以像下面这样使用:

 $query = $this->db->query('your sql here');

            if($query->num_rows == 0){
                log_message("info","User not found");
                return false;
            }
            else{
               //do what you want
            }

希望这可以解决您的问题。:)

【讨论】:

  • 我相信这将是一个 CI 配置问题。所写的构造在旧服务器上有效,但不会在新服务器的结果集中返回任何行。我确实根据您的建议修改了代码进行测试,但正如预期的那样,它仍然没有返回任何结果。没有错误,没有日志条目,只是没有数据。
  • 我修改了代码以使用 $this->db->get()->result_array() 这似乎有效。
猜你喜欢
  • 2020-07-09
  • 2017-09-27
  • 1970-01-01
  • 2015-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 2011-10-18
相关资源
最近更新 更多