2013-02-14 8 views
1

를 통해 MySQL의 쿼리를 전달, 내가 쿼리에서 데이터베이스 데이터를 얻을 수있는 PHP 스크립트 (예 : getDBData.php)를 호출하는 다음 JQuery와 있습니다 getDBData에서자바 스크립트 함수에서 자바 스크립트

$("#dbcontent").load("getDBData.php", {query: "SELECT * FROM `texts` WHERE name='John' LIMIT 10;"}); 

을,

$query = $_POST['query']; 

을하고는 mysql_query에 대한 입력으로 제공 : 내가 POST를 통해이 쿼리를 가져

$query = mysql_query($query) or die(mysql_error()); 

그러나, 내가 할 다음 MySQL 오류 :

SQL 구문에 오류가 있습니다. 올바른 구문을 보려면 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오. '\'John \ 'LIMIT 10'1 번 라인 근처에서 사용하십시오.

여기서 잘못된 것일 수 있습니다. 나는 쿼리를 통과 할 때 문자 인코딩과 관련이 있다고 생각하지만, 제대로 이해하지 못하는 것 같습니다.

+2

* 필수 : ​​● '*'는 mysql_로 함수 ([PHP 5.5 중단]한다 http://php.net/manual/en/faq.databases.php#faq.databases.mysql.deprecated). 나중에 제거 될 예정이므로 새 코드를 작성하는 것은 권장되지 않습니다. 대신 [MySQLi] (http://php.net/manual/en/book.mysqli.php) 또는 [PDO] (http://php.net/manual/en/book.pdo.php) 및 [더 나은 PHP 개발자가 되십시오] (http://jason.pureconcepts.net/2012/08/better-php-developer/). –

+12

이것은 ** 매우 ** 위험한 습관입니다. – Pointy

+8

'DELETE * FROM texts' 쿼리를 PHP 스크립트에 전달하기로 결정했다면 어떻게 될까요? 내가 그 일을 못하게하는 것은 무엇입니까? 여전히'mysql_query ($ query)'를하고 싶습니까? 개인적으로 나는하지 않을 것입니다. –

답변

5

어떠한 경우에도 절대로이 작업을 수행하지 마십시오. 적절한 쿼리를 작성하는 데 사용할 수있는 매개 변수를 전달해야합니다.

적어도 같은 것을 할 ....

자바 스크립트

$.post('getDBData.php', { 
    query: 'getTextsByUser', 
    user: 'John' 
}); 

PHP 다음

$queries = array(
    'getTextsByUser' => 'SELECT * FROM texts WHERE name = ?', 
    'getNewsById' => 'SELECT * FROM news WHERE id = ?' 
); 
$stmt = $dbConnection->prepare($queries[$_POST['query']); 
$stmt->bind_param('s', $_POST['user']); 

$stmt->execute(); 

$result = $stmt->get_result(); 
while ($row = $result->fetch_assoc()) { 
    // do something with $row 
} 

그리고 실행하는 쿼리를 결정하는 아약스를 통해 getUsers 통과 .

참고 : 그냥이 프로젝트를 시작하는 경우, mysql_query()이되지 않으며 당신이 mysqli 로의 전환을 고려해야합니다.

0

많은 사람들이 말했듯이, 이것은 매우 위험합니다. 그러나 URL 인코딩을 사용하여 쿼리를 지정해야한다는 사실은 실패 할 것이라고 생각합니다. http://en.wikipedia.org/wiki/Query_string#URL_encoding을 참조하십시오. 특히 = 기호에 적용됩니다.

+1

jQuery는 전달한 모든 것을 $ .load 함수의 키/값 쌍 인수로 올바르게 URL 인코딩합니다. 수동 인코딩을 수행 할 필요는 없습니다. –

1

다른 사람들이 지적했듯이 이렇게하지 마십시오! Webnet의 솔루션이 훨씬 좋습니다!

하지만 초기 문제를 해결하는 방법을 알고 있습니다. 나는 JSON을 파싱 할 때 한번도 그것을 가지고 있었고 stripslashes()을 사용하여 그것을 해결했다.

$query = stripslashes($_POST['query']); 
mysql_query($query);