2011-01-19 6 views
9

mysql_real_escape_string을 사용하여 문자열을 내 mysql 데이터베이스에 삽입하기 전에 이스케이프 처리합니다.mysql_real_escape_string and '

문자가 누락되어 mysql에서 ’으로 바뀐 것을 제외하면 모든 것이 정상적으로 작동합니다.

문제를 해결하려면 어떻게해야합니까? 문자열을 이스케이프하는 더 나은 함수를 사용해야합니까?

나는 또한 다른 charachters가 놓치고 있고 말도 안되는 것으로 바뀌었을지도 모른다는 것에 대해 걱정하고 있습니다!

도와주세요!

감사합니다 :) 당신은 대신 바인드 변수와 준비된 문을 사용한다

답변

16

문자 '를 놓치지 않고 있습니다. 단순히 문자를 포함하기 위해 mysql에서 사용하지 않는 문자이므로 이스케이프 할 필요가 없습니다.

이상한 문자열로 변환되는 이유는 멀티 바이트 문자이기 때문에 단일 바이트 필드에 넣기 때문입니다.

+8

명확히하려면 '과'사이에 차이가 있습니다 – dqhendricks

+2

+1 클라이언트/서버 인코딩 문제 일 수도 있습니다 (예 : 'SET NAMES'). 덕분에 – netcoder

+0

. 그래서 필드 인코딩을 utf-8로 설정하면 이런 문제를 해결할 수 있을까요? – significance

4

: http://php.net/manual/en/pdo.prepared-statements.php 당신은 아무것도 탈출에 대해 걱정할 필요가 없습니다 이쪽으로. 장점은 제가 링크 된 문서에 언급되어 있습니다.

+0

이것은 인용문의 어떤 양보다 더 분명하게 보입니다. 나는 PHP 팀이 바보 같은 첫 시도로 mysql_real_escape_string()을 제거하지 않았다고 기진 맥진했습니다. – sarnold

2

mysql_real_escape_string()은 (\의를 사용하여) 소수의 문자를 단순히 이스케이프하여 쿼리를 "안전"하게 만듭니다. 데이터 (스타일이 지정된 견적) 및 열 인코딩 유형과 인코딩이 일치하지 않는 것 같습니다. mysql_real_escape_string은 그런 종류의 문제를 결코 해결할 수 없다.

+0

은 쿼리에 포함되지 않고 쿼리의 인용 구분 문자열로 묶여 있습니다. 차이를 느껴봐 –

1

멋진 견적입니까? 그렇다면 문자 인코딩의 차이로 인해 데이터베이스에서 횡설수설처럼 보일 것입니다. 각 테이블에는 연관된 문자 인코딩이 있으며 연결에는 자체 인코딩이 있습니다.

쿼리 전에 "SET NAMES utf8"을 실행 해보십시오. 그러면 UTF-8 연결의 인코딩이 설정됩니다. 물론 UTF-8 문자를 latin1 테이블에 저장하려고하면 여전히 결과를 얻지 못합니다. 특수 문자 당신이 데이터베이스에 데이터를 삽입하는 페이지의 상단에 UTF 인코딩을

장소이 줄을 사용하기 위해 필요한이입니다

0

header ('Content-type: text/html; charset=utf-8'); 

작동 희망
-1
mysql_real_escape_string(utf8_encode($data)); 

희망이 있습니다.

-1
<?php 
    if(isset($_GET['submit'])) 
    { 
     mysql_connect('localhost','root',''); 
     mysql_select_db('test'); 
     $var=mysql_real_escape_string($_GET['asd']); 
     $sql="INSERT INTO `test`.`asd` (`id` ,`name` ,`desc`)VALUES ('', '$var', 'knkk');"; 
     echo $sql."<br />"; 
     $res=mysql_query($sql) or die('error'); 
     echo $res; 
    } 
?> 

<html> 
<body> 
    <form name="f1" method="get"> 
     <input type="text" name="asd"> 
     <input type="submit" name="submit"> 
    </form> 
</body> 
</html> 

출력 : test INTO

INSERT.asd (id, name, desc) VALUES ('', 'asd \'lgh ','knkk ');

1

enter image description here

0

그것은 경우에 작동합니다 당신과 함께 MySQL의 연결을 설립했다 :는 mysql_query ("NAMES 'UTF8'을 SET를");

즉, SET NAMES 'utf8'이 설정되어 있지 않으면 utf8_encode가 필요하지 않습니다.

관련 문제