CI 묻고 답하기

제목 CI 는 Mariadb 와 궁합이 안맞는듯 하네요.. query 질문..
글쓴이 진수 작성시각 2014/05/28 07:00:44
댓글 : 14 추천 : 0 스크랩 : 0 조회수 : 22604   RSS
 
// 게시판을 다른곳에 올려서 이곳에 다시 올립니다. 


안녕하세요.. 

CI 만진지는 1년정도 되갑니다. 



그전에는 PHP 5.3 / 5.5  + mysql 5.1 버전을 사용을 했었는데 별 문제가 없어보였습니다. 

이번에 PHP 5.5 + 5.5.37-MariaDB .. 버전을 설치해서 작업을 하고 있습니다. 

CI 는 2.1.4 버전을 사용합니다. 


문제는 query 가 아무것도 가져 오지 못하고 있습니다. 

$query = $this->db->select('*')->from('users')->where('u_id', $u_id)->where('u_pass', $pwd)->where('state','A')->get() ; 
 
$result = $query->result(); 

foreach ($query->result() as $row)
{
    echo $row->u_id;
    echo $row->user_name;

}

foreach 부분을 돌지도 않고 
모두  var_dump ($query); 를 통해서 보면 다음처럼 나옵니다..


object(CI_DB_mysqli_result)#22 (8) {
  ["conn_id"]=>
  bool(false)
  ["result_id"]=>
  NULL
  ["result_array"]=>
  array(0) {
  }
  ["result_object"]=>
  array(0) {
  }
  ["custom_result_object"]=>
  array(0) {
  }
  ["current_row"]=>
  int(0)
  ["num_rows"]=>
  NULL
  ["row_data"]=>
  NULL
}



또  SQL 구문 사용해도 마찬가지의 query 결과가 나옵니다. 
        $sql = "select * from users ";
        $sql .=" where u_id = '$u_id'  AND u_pass ='$pwd' AND state='A' " ;
        $query = $this->db->query($sql);



echo $this->db->last_query(); 를 찍어보면 다음과 같이 정상으로 나옵니다.. 

select * from users where u_id = 'test' AND u_pass ='1234' AND state='A' 


물론 DB GUI 툴에서 돌려보면 정상적으로 1 줄의 데이터가 나옵니다.. 

user 테이블의 이름과 각 필드들은 모두 소문자 처리가 되어 있습니다. 

무엇이 문제인가요?.. mariaDB 사용해서 서비스 하시는 분 계시면 답변 좀 부탁드립니다.. 

감사합니다. 
 
 다음글 hmvc 사용하려는데 혼란스러운 부분이 있어요 (7)
 이전글 Controller -> View 데이터 전달 할... (3)

댓글

한대승(불의회상) / 2014/05/28 08:43:58 / 추천 0
database.php에 설정한 mysql 드라이버는 어떤걸 사용하고 계시나요?
진수 / 2014/05/28 09:05:37 / 추천 0
답변 감사합니다. 

여기 CI 문의 게시판을 모두 뒤져보니 두가지 포인트가 있었습니다.. 

하나는 mysqli  또는 PDO 드라이브로 바꾸라는것과  

/system/database/DB_driver.php 부분의 400 라인 부분의 두 줄 변경 이었습니다. 


mysqli 드라이버가 잡히게 했고  DB_driver.php 부분도 수정해서 적용했지만 역시 아무것도 나오지 않았었습니다. 

구글에 CI 외 MariaDB 관련 내용들을 물어봐도 별다른 대답을 내 놓지 않는거 같습니다. 

에러가 없이 그냥 값을 전달해 주지 않으니 마땅히 어떻게 검색해봐야 할지도 남감하네요.. 



우선은 급한대로 Mysql 5.5 버전으로 다시 시스템 만들어서 일단 작업은 하고 있습니다만. MariaDB 를 꼭 써보고 싶습니다. 
 
letsgolee / 2014/05/28 09:23:28 / 추천 0
혹 리눅스 서버인가요? 아니면 윈도우 서버인가요? 리눅스의 경우 대소문자 구분을 하는 것으로 압니다.

http://www.codeigniter-kr.org/qna/view/11416/page/1
letsgolee / 2014/05/28 09:32:58 / 추천 0
혹은 라이브러리버젼이 맞지 않아 안되는 경우도 있습니다. 즉 php에 있는 libmysql.dll 버젼과 서버의 버젼과 일치하지 않을 때도 있습니다. 제가 firebird를 좋아해서 가끔 이걸 만지는데 버젼이 다르면 안되더라구요. 그 때 경험적으로 배웠습니다.
진수 / 2014/05/28 09:42:43 / 추천 0
리눅스 서버입니다..

CentOS 6.5 64 bit 버전을 사용합니다. 

대소문자 구별은 이미 알고 있어서 모든 변수와 필드 이름, 데이블 이름까지 모두 소문자로 처리하고 있습니다. 

remote server 에  mysqld 5.5 를 설치하고

local server  에 mariaDB 5.5 를 설치해서 테스트 해보고 있는데 .. 

프로그램 소스 하나에서 $db['default']['hostname']  이 부분만 달리해서 테스트 해보는데 

mariaDB 만 아무 값을 리턴하지 않고 있네요.. .


Data 는 mysql 서버에서 백업 받아 mariaDB 에 부어서 사용했습니다.. 

혹시나 해서 다음과 같은 소스를 만들어서 테스트 해보면.. 다음의 결과가 나옵니다. 


--결과 .. 
Connected successfully
Could not successfully run query (select * from users where u_id = 'test' AND u_pass ='1234' AND state='A' ) from DB: Query was empty

--소스  
<?php
 
$link = mysql_connect('localhost', 'user_id', 'password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
echo "<br>";
echo 'Connected successfully';
echo "<br>";

$u_id = 'test' ;
$pwd = '1234' ;
$sql = "select * from  users  ";
$sql .=" where u_id = '$u_id'  AND u_pass ='$pwd' AND state='A' " ;
$result = mysql_query($query) ;

if (!$result) {
    echo "Could not successfully run query ($sql) from DB: " . mysql_error();
    exit;
}

if (mysql_num_rows($result) == 0) {
    echo "No rows found, nothing to print so am exiting";
    exit;
}

echo $result ;


while ($row = mysql_fetch_assoc($result)) {
 
    echo $row["u_id"];

}

mysql_close($link);







 
진수 / 2014/05/28 09:47:32 / 추천 0
/letsgolee 

답변 감사합니다. 

Library 문제라면.. DB connection 자체도 안되지 않을까 싶기도 합니다. 

암튼 현재는 centOS 6.5 버전에서 yum 으로 remi repo 에서  php 5.5.12 를 설치한 상태인데 이 부분을 한 번 찾아보고 .. 결과가 나오면 글을 올리겠습니다.. 
 
앤드그리고 / 2014/05/28 11:49:29 / 추천 0
안녕하세요.
답변은 아니고, 비슷한 환경에서 작업중이기 때문에, 제가 작업중인 환경을 올려드립니다.

CodeIgniter 2.1.4 + MySQL 로 서비스를 운영중이고,
서비스 업데이트를 준비하면서 CodeIgniter 2.1.4 + MariaDB 로 테스트 하고 있습니다.

테스트 하고 있는 서버 정보는
ubuntu 14.04

php --version
PHP 5.5.9-1ubuntu4 (cli) (built: Apr  9 2014 17:11:57)

mysql --version
mysql  Ver 15.1 Distrib 10.0.11-MariaDB, for debian-linux-gnu (x86_64) using readline 5.1

입니다.

nginx, php, mariadb 모두 apt-get  으로 설치 했고,
드라이버는 mysql 을 사용하다가 pdo 로 변경했습니다.

 
공이 / 2014/05/28 12:04:26 / 추천 0
상관 없는 부분일 수 있으나..
sql_mode 부분을 한번 체크해 보시기 바랍니다.
설정파일 또는 set global sql_mode='' 등으로 없애보고 테스트 한번 해보세요..
변종원(웅파) / 2014/05/28 12:21:10 / 추천 0
centos 6.3에 maria DB(5.5.36) 설치하여 사용중입니다.

다른 웹서버(ci 2.1.3)에서 mysql db driver로 연결하여 사용중이며 특별히 작업한건 없는 것 같습니다. (기억이... )

설치는 http://millky.com/#/home/byuri/10001001 이 글을 참고했구요.
한대승(불의회상) / 2014/05/28 13:40:46 / 추천 0
centos 6.5 에 maria DB(10.0.10) CI 2.1.4 사용하여 개발중입니다.

드라이버는 mysqli 사용중인데 아직 이렇다 할 문제는 발견하지 못했습니다.
들국화 / 2014/05/28 18:01:09 / 추천 0
이름은 Maria 인데... 왜 그림은 물개 인지 의문... 강치 같기도 하고...
maria가 암말 암당나귀라는 뜻도 있네요... 음..
한대승(불의회상) / 2014/05/28 18:24:02 / 추천 0
my 는 첫째 딸 이름이고 maria 는 둘째 딸 이름이라고 하더군요. ^^
들국화 / 2014/05/28 18:41:30 / 추천 0
누구 딸 인가요?... 이름이 my라.. ㅋㅋㅋ
앤드그리고 / 2014/05/30 11:42:43 / 추천 0
원글에 대한 답변이 아니라 죄송합니다.

들국화//
Michael Widenius 라는 사람의 딸 이름이고
딸 My, Maria, 아들 Max 이렇게 다 이름이 붙어 있다고 합니다.
MySQL, MariaDB, MaxDB

http://en.wikipedia.org/wiki/Michael_Widenius