2016-10-10 12 views
0

私は、AWS Ubuntu 12/PHP 4.2/CI 1.3.1上の既存のCIプロジェクトを、Ubuntu 16.0.4 LTS/Apache 2.4.18/PHP 7.0を実行する新しいAWSインスタンスに更新しています.8/MySQL 5.7.15/CI 3.1.0。CodeIgniter Mysql DBクエリのヌル結果セット

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` = '[email protected]' OR `email` = '[email protected]' LIMIT 1" 

のvar_dump($クエリ);

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 } 
+0

Clarifica私はvar_dumpを通してパラメータが正しいことを確認しました.SQL文は期待通りです。 問題を解決するために他にチェックするべきことがわかりません。 – AV8R

答えて

0

あなたはCI に照会し、このフォーマット$query = $this->db->get('users', 1);を使用した場合、その後の行の数は、以下のようにすることによって実現されます。

$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 
      } 

これがあなたの問題を解決する可能性があります。:)

+0

私はこれがCI構成の問題であると信じています。書かれた構成は古いサーバーでは機能しますが、新しいサーバーの結果セットには行が戻されません。 私はテストのためのあなたの提案に従ってコードを修正しましたが、期待通りに結果を返さなかったのです。エラーは発生せず、ログエントリもデータもありません。 – AV8R

+0

私は$ this-> db-> get() - > result_array()を使うようにコードを変更しました。 – AV8R

関連する問題