Warning: mysql_fetch_array() 에러가 납니다!
글쓴이: oppa / 작성시간: 화, 2014/11/04 - 2:06오전
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /p3.php on line 14
include 'db_connect.php'; $result = mysql_query("SELECT * FROM `table_name` WHERE `Username` = ".$_GET['username']); $row = mysql_fetch_array($result); // line 17 이곳에 에러가 납니다.
뭐가 문제인가요? 고수님들 알려주세요?
Forums:
쿼리문장 신텍스 에러
제곧내. 쿼리문을 풀어 써보세요. 제가 해보죠:
SELECT * FROM `table_name` WHERE `Username` = [username]
[username] 은 문자열 리터럴로 들어가야 합니다. 따옴표로 감싸저야죠. 쿼리 에러가 나면 $result 에 결과가 반환되지 않습니다.
php 완전 기초를 하시는 것 같으신데, 이거 엄청 오래된 코드입니다. obsolete 됐다고 하죠. 회사같은 대서 이걸 꼭 써라하면 어쩔 수 없지만 되도록 mysqli 를 사용하세요.
추후 php api 에서 사라질 계획입니다. (한 5버전이 끝날 때?)
또 사족으로, 어느 CGI 프로그램이나 저렇게 GET 파라미터를 그대로 쓰면 위험합니다.... mysqli_escape_string() 으로 인젝션을 피해야 되요.
이게 꼭 SQL이 아니라 다른 파일 시스템 내의 파일이나 해시라도 마찬가지입니다. 클라이언트의 요청값을 그대로 쓰지 않고 유효성을 검사하는 건 서버 프로그래밍의 기본입니다.
음.. 제경우는 좀 지난 문제지만
` (이하, grave key)라는 것은 mysql에서 정석으로 쓰고 있는 겁니다. 흔히들 column_name, table 이것에도 아이런것은 지켜야지 해서 저도 질문자님인 oppa 님 처럼 `table_name` 이렇게 했거든요. 2주동안 문제를 찾지 못하다가 다른 에러 없는 쿼리문이랑 비교를 해보니 grave key 가 싸여져 있더군요. 이것을 없애니 방금 문제가 해결 되었습니다.
댓글 달기