자바 스크립트에서 문자열 사이에 함수를 삽입 할 수 있으므로 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으로 시도해야
두 번째 예제에서 얻은 오류는 무엇입니까? – Electronick
그렇게하면 어떻게됩니까? 당신이 바라는 것과 어떻게 다른가요? (기술적 인 질문을 할 때, "작동하지 않는다"라는 말은 거의 항상 잘못된 것입니다. 구체적으로 말하십시오!) –
두 번째 PHP 예제는 저에게 잘 작동합니다. http://codepad.org/NwEvj5Np –