-2

좋아, 이것은 나를 미치게 만든다. 내 PHP 버전은 5.2.17이다, MySQL 버전은 5.1.59"mysql_real_escape_string"오류가 데이터베이스에 연결 중입니다. 내가 뭘 잘못하고 있니?

내 자바 스크립트 (JQuery와)입니다 : 페이지로드

내 "file.php에 아약스 호출입니다

$(document).ready(function(){$.post("file.php",{"dropTable":tableName}, function(data){});}); 

<?php 

     require_once"getDBParameters.php"; 

     $dbParameters = getDBParameters(); 
     if($dbc = mysqli_connect($dbParameters['db_host'], $dbParameters['db_username'], $dbParameters['db_pass'], $dbParameters['db_name'])){ 

      if(isset($_POST['dropTable'])){ 
       $dropTable= $_POST['dropTable'] ;    
       $escapedRealString = mysql_real_escape_string($dropTable, $dbc); 

       echo ($escapedRealString); 
       exit(); 
      } 
     } 
    ?> 

내가 말하는 PHP의 오류 : "다음 코드가 포함

같은 연결이 완벽하게 작동 내가 준비된 문을 사용하는 경우 나 사용자의 입력에 따라 MYSQL 테이블을 삭제하고 있습니다 때문에, 그러나,이 경우 준비된 문을 사용할 수 없습니다

DROP TABLE $dropTable 

PHP 매뉴얼 말한다 다음과 같은 준비된 명령문을 사용할 수 없습니다. "getDBParameters"함수가 정상적으로 작동한다는 것을 확신 할 수 있습니다. 뭐가 문제입니까? 다른 해결책?

+4

'사용자 입력에 기반한 MYSQL 테이블을 삭제할 것이기 때문에이 경우 준비된 명령문을 사용할 수 없습니다. '와우 ... 쉬운 게임은 쉽습니다. –

+3

@Damien 그는 적어도 깨끗한 인터페이스를 제공하고 있습니다. 바비 테이블이 필요하지 않습니다. ; o) – deceze

+0

@DamienPirsy, 예 ... 개인 사이트의 백엔드입니다. 한 명의 사용자 만 로그인 할 수 있습니다 ... 여전히 예방 조치를 취해야합니다. 매우 감사드립니다. 매우 귀중한 의견 tho – dinchakpianist

답변

5
mysqli_connect 
    ^
mysql_real_escape_string 
    ^

당신은 MySQL의 내가와 MySQL 기능을 혼합하고 있습니다. 그들은 완전히 다른, 호환되지 않는 확장 기능입니다. 사용해야 할 경우 mysqli::real_escape_string을 사용하십시오.

1

mysqli_connect을 사용하는 경우 mysql 이스케이프 기능을 사용할 수 없습니다.

mysqli_real_escape_string을 사용할 수도 있습니다.

PHP mysql과 mysqli 라이브러리는 별개이므로 매개 변수 유형도 동일합니다. mysql은 resource을 사용하고, mysqli는 object입니다.

편집 : 언급 한대로 사용자 입력에 따라 표를 삭제하는 것은 위험합니다.