2013-07-20 2 views
0

데이터베이스 테이블에 값을 삽입하는 PHP 코드가 있습니다. 나는 MySQL을 사용하고있다. 여기에 '$'기호가 들어있는 문자열을 저장해야합니다 (예 : $ V # CDFBvQi). 그러나이 값을 저장하기 전에 저장하기 전에 하위 문자열 '$'을 '\ $'로 바꾸기 때문에 저장하기 전에 단어가 \ $ V # CDFBvQi와 같아야합니다. 하위 문자열을 대체하기 위해 아래 PHP 코드를 사용했습니다.

$dbp = $_POST['varname']; // here $dbp value is $V#CDFBvQi. 
if (strpos($dbp, '$') !== false) { 
    $dbp = str_replace("$", "\\$", $dbp); 
} 
echo $dbp; //here $dbp value is \$V#CDFBvQi. 

그리고이 코드는 정상적으로 작동합니다.
하지만 값 $ dbp (현재 \ $ V # CDFBvQi)를 삽입하면 데이터베이스 테이블에 $ V # CDFBvQi 만 포함됩니다. 다음은 MySql 삽입 코드입니다.

$link = mysql_connect("localhost", "root", "root"); 
mysql_select_db("dbsamplename", $link); 
mysql_query("insert into sampletable values('".$dbp."')"); 

어떻게하면됩니까? 필자는 PHP 초보자로서 조언을 구합니다.

+0

"mysql_real_escape_string"을 사용하거나 쿼리 매개 변수가있는 비 사용되지 않는 MySQL API (보통 mysqli 또는 PDO)로 변경하십시오. –

답변

0

MySQL 확장은 더 이상 사용되지 않으므로 사용하지 마십시오. mysqli를 prepared statement와 함께 사용하면 문자열 이스케이프에 대해 걱정할 필요가 없습니다. 나는 다음 코드가 당신의 문제를 해결할 것이라고 믿는다.

예 : 제공 솔루션에 대한 http://mattbango.com/notebook/code/prepared-statements-in-php-and-mysqli/

0

감사합니다, 그러나 이것은 내 문제를 해결 : 전체 예제

$stmt = $mysqli -> prepare("insert into sampletable values(?)"); 
/* Bind parameters */ 
$stmt -> bind_param("s", $dbp); 
/* Execute it */ 
$stmt -> execute(); 

참조하십시오.

$dbp = str_replace("$", "\\\\$", $dbp); 

감사합니다.