2012-08-03 3 views
1

원래 게시물 :배열에서 변수를 추출한 mysql_real_escape_string

내 스크립트가 작동하지 않습니다 (데이터를 기록하지 않습니다). 나는 mysql_real_escape_string를 추가하기 전에 작동, 그래서 어쩌면 내가 제대로 구현하지 않은 경우 궁금하네요 :

$array = json_decode($downstream,TRUE); 
$name = $array["status"]["name"]; 
$title = $array["status"]["title"]; 
$table = "mrTable"; 
$insert = "INSERT INTO $table (name, title) VALUES ('".mysql_real_escape_string($name)."', '".mysql_real_escape_string($title)."')"; 

이 INSERT에서 그 구현이 당신에게 올바른 보입니까

?

UPDATE : 여기

희망이 도움이 될 것입니다, 전체 코드입니다. 그래도 여전히 작동하지 않습니다. real_escape_string 함수가 사용되면 데이터 요소 중 NONE이 데이터베이스에 기록됩니다. 이스케이프 기능을 제거하자마자 아포스트로피가 나타나지 않는 한 데이터는 잘 기록됩니다. 여기

은 우리가 간다 :

//read contents of this file: 

$json_data = file_get_contents('../list.txt'); 

//json to a php array 

$array = json_decode($json_data,TRUE)); 

//store in mysql table 

$table = "table1"; 
$name = mysql_real_escape_string($array["current"]["name"]); 
$code = mysql_real_escape_string($array["current"]["code"]); 

$insert="INSERT INTO $table (name, code) VALUES ('$name', '$code')"; 

$con = mysql_connect($db, $user, $pass); 
if (!$con) 
    { 
    die ('Could not connect: ' . mysql_error()); 
    }; 

mysql_select_db($yup, $con); 

mysql_query($insert) OR die(mysql_error()); 

mysql_close($con); 

업데이트 2

고정! 먼저 mysql_real_escape_string을 언급하기 전에 데이터베이스에 연결해야합니다. 모든 것이 지금 작동 중입니다 ... 빈 데이터가 없습니다.

+1

변수 $ name이 없습니다. 대신 $ artist를 입력해야합니다. –

+0

그리고 실행 후 오류를 확인 했습니까? mysql_error()의 출력? –

+0

Eugene -이 게시물의 코드를 복사하는 동안 내 오류였습니다. 변수 이름은 실제 스크립트에서 일관 적입니다. – Phoebe

답변

1

mysql_real_escape_string을 사용하려면 데이터베이스에 연결해야합니다. 당신은 그렇게 보이지 않습니다. mysql_connect가 정의 된 곳의 라인 위에 있는지 확인하십시오. $insert

+0

또한 mysql_query()를 수행하기 위해 연결해야하며 OP는 m_r_e_s가 믹스에 추가되기 전에 작동 중이라고 말하면서 그가 연결되었음을 암시합니다 (예 : 연결이 단순히 표시되지 않음). –

+0

글쎄, 사람들은 한 번만 특정 변화를한다고 말하면서 그들은 그들이 알고있는 다른 것을했음을 알게됩니다. mysql_real_escape_String()을 추가하는 것만으로도 문제가 발생하지 않으므로 다른 잘못된 작업을해야합니다. –

+0

감사합니다. 나는 연결되어 있으며 여기서 변경 한 것은 mysql_real_escape_string 항목을 추가 한 것뿐입니다. – Phoebe

0

쿼리 문자열에 직접 값을 삽입하지 마십시오! 그들이 탈출했다고해도 똑똑한 생각은 아닙니다. 대신, 매개 변수화 된 명령문을 그대로 사용하십시오. 그러면 OR 1 = 1 - 쓸모없는 공격이 렌더링됩니다. 매개 변수화 된 명령문의 값을 이스케이프 할 필요가 없습니다 ...

완료되면 할당 해제하십시오. 다른 값으로 원하는만큼 다시 실행할 수 있습니다. 어쨌든 재실행 할 경우, 이런 식으로 수행하는 것에서도 성과가 있습니다! (이 문은 무한한 실행 횟수로 한 번만 준비되기 때문에)이 방법을 구현 한 다음 문제가 계속되면 다시 돌아와야합니다.

+0

Mr_Creosote에게 감사의 말을 전합니다. 아직도 궁금한 내 현재 접근 방식이 작동하지 않는 이유는 무엇입니까? – Phoebe

+0

내 생각은 아마도 이스케이프 기능을 구현 한 후에 작동이 중지되었다고 언급했기 때문에 이스케이프 처리가 문제를 일으키고 있다고 생각했습니다. 현재 바쁘신데, 문제가 여전히 발생하는 경우 나중에 살펴볼 수 있습니다. –

-1

매개 변수를 벗어나려고 시도하지 마십시오. 바인드 변수를 사용하십시오. 예제는 http://bobby-tables.com/php.html을 참조하십시오.

관련 문제