MySQL 테이블에 데이터를 insert하다보면 어떤 데이터는 insert가 실패하는 경우가 있다.
이때 exception을 발생하는 것도 아니고 mysqli_query()의 반환 값을 false로 반환하는 정도 선에서 끝난다.
그래서 80개의 레코드를 가진 테이블을 읽어 와서 새로운 테이블에 insert 작업을 하는데
78개만 insert가 된다거나와 같은 상황이 발생하는 것이다.
이유와 원인은 홑따옴표(') 처리에서의 문제다.
게시판의 경우 제목이나 내용에 홑따옴표(')가 포함되는 경우가 있다.
이 경우 insert는 보기 좋게 실패한다.
예를들어 $result에 select한 결과 셋이 있다고 할때
while($data = mysqli_fetch_array($result))
{
... 전략 ...
$title = $data['title'];
$con = $data['content'];
... 후략...
$qry = "insert into my_table (...생략... title, content ...생략...) values (...생략... '$title', '$con' ...생략... )";
mysqli_query($qry, $connect);
}
이 경우 title 내용이나 content에 홑 따옴표가 있다면 해당 레코드가 insert가 되지 않는다.
해법은 title과 content에 addslashes()함수를 사용한다. 그렇게 되면 홑따옴표에 \를 추가해서 MySQL에 insert를 하게 되고 정상적으로 입력이 된다.
다음과 같이...
$title = addslashes($data['title']);
$con = addslashes($data['content']);
'MySQL' 카테고리의 다른 글
MySQL table로부터 DDL 추출하기 (0) | 2017.06.01 |
---|---|
mysqlimport명령어를 이용하여 로컬의 텍스트 파일이나 dump파일을 MySQL db의 table에 값 저장하기 (0) | 2017.05.18 |
mysqldump시 unknown variable 'symbolic-links=0'라는 에러에 대해 (0) | 2017.03.10 |
MySQL limit 기능에 대해서 (0) | 2016.10.20 |
MySQL 명령어 목록 (0) | 2015.10.02 |