by 다어려워 [MySQL] php error fetch_array [2019.06.25 10:44:23]
$sql = "SELECT center, COUNT(CASE 월 WHEN 1 THEN 1 END) m01, COUNT(CASE 월 WHEN 2 THEN 1 END) m02, COUNT(CASE 월 WHEN 3 THEN 1 END) m03, COUNT(CASE 월 WHEN 4 THEN 1 END) m04, COUNT(CASE 월 WHEN 5 THEN 1 END) m05, COUNT(CASE 월 WHEN 6 THEN 1 END) m06, COUNT(CASE 월 WHEN 7 THEN 1 END) m07, COUNT(CASE 월 WHEN 8 THEN 1 END) m08, COUNT(CASE 월 WHEN 9 THEN 1 END) m09, COUNT(CASE 월 WHEN 10 THEN 1 END) m10, COUNT(CASE 월 WHEN 11 THEN 1 END) m11, COUNT(CASE 월 WHEN 12 THEN 1 END) m12 FROM ( SELECT center, MONTH(date) 월 FROM good WHERE code = '$code' AND date LIKE '2019%' ) a GROUP BY center"; $result = $conn->query($sql); $row = $result->fetch_array();
PHP에서 생긴 오류인건지 DB랑 무슨 문제인건지 잘 모르겠는데 여기에다가 질문을 올려봅니다.
저번 글에 마농님이 해결해주신 query를 phpMyadmin으로 직접 입력하면 결과값을 가져옵니다.
문제는 PHP에 sql를 등록하고 result를 하면 값을 가져오지 못하더군요.
결과값은 num_row 값은 0으로 나오고 $result->fetch_array()에서 해당 아래의 오류가 발생이 됩니다
'call to a member function fetch_array() on boolean in php'
phpMyadmin에서는 정상적으로 작동이 되는데 왜 php에서는 작동이 안될까요?
참고로 다른 query문들은 정상적으로 작동이 되었습니다
1. sql 문장을 단순 문자열로 해서 사용하네요.
$code 를 연결하는 부분이 잘못인 듯 하네요.
문자 연결은 . 을 이용해야 합니다.
- 변경전 : code = '$code'
- 변경후 : code = '" . $code . "'
2. 조건을 문자열로 연결하여 동적으로 붙이는 것 보다는
prepare 를 이용해 바인드 변수로 처리하는것이 좋습니다.
http://docs.php.net/pdo.prepared-statements