2012-03-26 2 views
1

난 다음이 오류에 직면하고있어 내 코드를 실행하면 :파일의 내용을 읽고 그 문자열을 추가 - SQL 오류 및 MySQL의 오류

mysql_num_rows도() 매개 변수 (1) 자원이 될 것으로 예상, 부울

파일의 드문 경우에서 발생합니다. 나머지는 잘 작동합니다.

SQL 구문에 오류가 있습니다. 라인 1

예, 그것의 취약에서 ' 근처의't '를 사용할 수있는 권리 구문에 대한 MySQL 서버 버전에 해당하는 설명서를 확인, 난을 참조하십시오. 문제를 만드는 아마 이상한 charecters지만, 나는 그들을 md5ing에 대한 DB에 단어를 저장하기 때문에 나는 정말로 그들을 편집 할 수 있습니다.

mysql_real_escape_string은 다른 md5 값을 줄 수있는 일부 슬래시를 추가한다고 가정합니다. 그렇다면 어떻게 데이터를 편집하고 동시에 스크립트를 안전하게 할 수 있습니까?

require ("dbconnect.php"); 
$list = fopen("huge.txt","r"); 
//convert and save to db 
while(!feof($list)) 
    { 
    $word = fgets($list); 

    //check if already in db. 
    $check = mysql_query("SELECT id FROM `database` WHERE word='$word'") or 
    die(mysql_error()); 
    if (mysql_num_rows($check)==0) 
    { 
    //rest of the codes 

나는 무엇이 잘못되었는지보기 위해 die()을 추가했습니다.

+1

mysql_real_escape는 string의 값을 변경하지 않습니다. 당신은 그것을 – safarov

+0

@safarov Awesome 사용할 수 있습니다. 나는 여분의 슬래시 정도를 추가 할 것이라고 생각했다. 내가 직면하고있는 다른 문제에 대한 어떤 생각? 감사합니다 – Kishor

+1

모두 같은 문제의 원인입니다 – safarov

답변

1

질문 1에 대해 데이터베이스 연결이 하나만있는 경우 mysql_num_rows()에 인수를 전달하지 않아야합니다.

질문 2의 경우 이스케이프 된 버전은 데이터베이스에 저장되고 데이터베이스에서 다시 가져온 경우 다른 해시를 생성해서는 안됩니다. 이스케이프 된 문자열이 데이터베이스에 저장되면 저장된 버전은 효과적으로 이스케이프 문자를 잃게됩니다. 이것은 데이터베이스에서 이스케이프 된 값을 가져올 때 "예를 들어" '보이지 않는 이유입니다.

기본적으로 해시를 처음 만들 때 해시 입력에 이스케이프되지 않은 버전의 해시 입력을 사용한 다음 일반 텍스트 버전을 이스케이프 처리해야 데이터베이스에 저장할 수 있습니다. 그런 다음 언제든지 데이터베이스에서 일반 텍스트 버전을 가져 와서 다시 해싱 할 수 있으며 일치하는 해시 값을 만들어야합니다.

+0

왜 내가 탈출하지 않은 버전을 먼저 해시해야한다고 말했습니까? 일반 텍스트를 이스케이프 처리하고 저장하고 다시 당겨 해시 할 수 있습니까? 둘 다 나와 같은 해시를 제공합니다. 그게 아니야? – Kishor

+0

@Kishor 예, 유일한 단점은 이스케이프 된 버전을 해시 생성을위한 입력으로 사용하지 않는 것이 었습니다. – dqhendricks

+0

나는 아직도 어쨌든 둘 다 똑같을 것이라고 말했기 때문에 나는 그 문제를 안다. 내가 놓친 게 있니? – Kishor