2012-05-01 5 views
-4

자바 스크립트에서 문자열 사이에 함수를 삽입 할 수 있으므로 PHP에서도 가능해야합니다.문자열에 함수 mysql_real_escape_string을 삽입 할 때 오류가 발생했습니다.

자바 스크립트 :

var myString = "aString " + function_returning_string() + " anotherString"; 

PHP : 그것은이 페이지의 예처럼 sprintf를 수행 할 수 있습니다 http://fr.php.net/mysql_real_escape_string

$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'", 
      mysql_real_escape_string($user), 
      mysql_real_escape_string($password)); 

그것은 잘 작동하지만,이 경우 작동하지 않는 이유를 알고 싶어요 우리는 모든 것을 직접 다음과 같이 문자열에 집어 넣습니다 :

$query = "SELECT * FROM users WHERE user='".mysql_real_escape_string($user)."' AND password='".mysql_real_escape_string($password)."'"; 

우리는 어떻게 할 수 있습니까? 에스?

일부 답변을 통해 문제가 다른 함수가 작동하기 때문에 문자열에 포함 된 함수와 아무런 관련이 없다는 것을 알게되었습니다. 따라서 분명히 mysql_real_escape_string (deprecated) 함수입니다.

변수에 결과를 저장 한 다음 문자열에 삽입하면이 함수가 작동하지 않습니다.

은 여기 내 전체 PHP 파일, 파이어 버그 콘솔에서 500 내부 서버 오류와 수정없이입니다 :

<?php 
/*ini_set('display_errors', 'On'); 
error_reporting(E_ALL | E_STRICT); 

require_once('/var/www/FirePHPCore/FirePHP.class.php'); 
ob_start(); 
$firephp = FirePHP::getInstance(true);*/ 


$reference = $_POST['reference']; 
$txtGauche = $_POST['motGauche']; 
$txtDroite = $_POST['motDroite']; 
$ptGauche = $_POST['repGauche']; 
$ptDroite = $_POST['repDroite']; 

$base = mysql_connect("localhost","root","root"); 

$sql_utf8 = "SET NAMES utf8;"; 
$sql_base = "CREATE DATABASE IF NOT EXISTS elan 
DEFAULT CHARACTER SET utf8 
DEFAULT COLLATE utf8_general_ci;"; 
$sql_table = "CREATE TABLE IF NOT EXISTS relier_points (
`Reference` VARCHAR(20), 
`TexteGauche` VARCHAR(500), 
`TexteDroite` VARCHAR(500), 
`ReponseGauche` VARCHAR(300), 
`ReponseDroite` VARCHAR(300));"; 

/*$sql_insert = sprintf("INSERT INTO relier_points VALUES('%s','%s','%s','%s','%s')", 
    mysql_real_escape_string($reference), 
    mysql_real_escape_string($txtGauche), 
    mysql_real_escape_string($txtDroite), 
    mysql_real_escape_string($ptGauche), 
    mysql_real_escape_string($ptDroite));*/ 

$reference = mysql_real_escape_string($reference); 
$txtGauche = mysql_real_escape_string($txtGauche); 
$txtDroite = mysql_real_escape_string($txtDroite); 
$ptGauche = mysql_real_escape_string($ptGauche); 
$ptDroite = mysql_real_escape_string($ptDroite); 

$sql_insert = "INSERT INTO relier_points VALUES('$reference','$txtGauche','$txtDroite','$ptGauche','$ptDroite')"); 


mysql_query($sql_utf8,$base); 
mysql_query($sql_base,$base); 

mysql_select_db("elan",$base); 

mysql_query($sql_table,$base); 
$result = mysql_query($sql_insert,$base); 

//$firephp->log($result, 'test'); 

mysql_close($base); 

if($result == TRUE) 
    echo "Exercice $reference reçu"; 
else 
    var_dump($result); 
?> 

죄송합니다 아, 어제 피곤했다. 당신이 눈치 채지 못했을 경우 문자열에서 $ sql_insert를 직접 변환 할 때 sprintf에서 마지막 ")"을 제거하는 것을 잊었습니다.

$sql_insert = "INSERT INTO relier_points VALUES('" 
    .mysql_real_escape_string($reference)."','" 
    .mysql_real_escape_string($txtGauche)."','" 
    .mysql_real_escape_string($txtDroite)."','" 
    .mysql_real_escape_string($ptGauche)."','" 
    .mysql_real_escape_string($ptDroite)."')"; 

그래서이 서투른 오류했지만, 적어도 내가 대신 mysql_로 기능의 PDO 또는 MySQLi를 사용한다는 것을 배웠습니다 :)

: 그런데

은, 지금은 변수없이 노력하고 있습니다 이

$user = mysql_real_escape_string($user); 
$password = mysql_real_escape_string($password); 
$query = "SELECT * FROM users WHERE user='$user' AND password='$passowrd'"; 

그것은 코드와 단순 읽기에 쉬운 노고해야처럼 당신은 veriables.I으로 시도해야

+0

두 번째 예제에서 얻은 오류는 무엇입니까? – Electronick

+1

그렇게하면 어떻게됩니까? 당신이 바라는 것과 어떻게 다른가요? (기술적 인 질문을 할 때, "작동하지 않는다"라는 말은 거의 항상 잘못된 것입니다. 구체적으로 말하십시오!) –

+0

두 번째 PHP 예제는 저에게 잘 작동합니다. http://codepad.org/NwEvj5Np –

답변

-2

는 것을 의미한다.

+0

제 질문은 변수가 아닌 함수를 문자열에 삽입하는 방법이었습니다. 하지만 전에이 솔루션을 시도하고 신기하게도 작동하지 않습니다. / – baptx

관련 문제