2011-08-22 3 views
0

내가 PDO이 쿼리를 실행하려고 실패삽입 특수 문자와 JSON 인코딩 값은

UPDATE categories 
SET keywords = '{"bg":["keyword1","\u0431\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438 "]}' 
WHERE id = 4; 

문제는 백 슬래시없이 16 진수 값을 기록 할 것이다 ("\") . 그것은 내 애플 리케이션뿐만 아니라 PHPMyAdmin에서 백 슬래시없이 표시됩니다.

이 쿼리에서 exec()를 사용하고 동적/변형 된 변수없이이 전체 텍스트 쿼리를 사용해 보았습니다. PDO 매개 변수는 다음과 같습니다.

PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, 
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8" 

여기에 무슨 일이 일어 났는지 설명 할 수 있습니까? 감사!

업데이트 : mysql의 CLI에서이 정확한 쿼리를 실행 한 다음 거기에 표시하고 문제가 동일합니다. 모든 백 슬래시가 사라졌습니다. 따라서 문제는 PDO와 관련이없는 것 같지만 MySQL 또는 나! 내 버전은 5.1.53입니다.

+1

코드 샘플이 많은 도움이 될 수 있습니다. – J0HN

+0

준비 및 실행 위치와 관련된 코드를 추가하십시오. – hakre

+0

고마워,하지만 PHP와 관련이없는 것처럼 보입니다. mySQL의 CLI로 느슨한 결과를 얻었습니다. – Nabab

답변

1

\ 문자는 SQL에서 특별한 의미가 있습니다. 쿼리에 사용하는 기본 문자열에 값을 하드 코딩하는 대신 bound parameters을 사용하십시오.

+0

예, 그게 전부입니다. 나 뒤에 특별한 숯없이 백 슬래시 자체가 특별한 의미가 있다는 것을 몰랐다. – Nabab