在字符串中插入函数mysql_real_escape_string时出错

时间:2012-05-01 19:29:31

标签: php mysql

我知道我们可以在Javascript中的字符串之间插入一个函数,所以它也可以用PHP。

使用Javascript:

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 (已弃用)函数。

当我将结果保存在变量中然后将其插入到字符串中时,此功能也不起作用。

这是我的完整php文件,Firebug控制台中没有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)."')";

所以这是一个笨拙的错误,但至少我已经知道我应该使用PDO或MySQLi而不是mysql_函数:)

1 个答案:

答案 0 :(得分:-2)

你应该尝试使用veriables。我的意思是这样的

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

它应该是有效的。它易于阅读代码而且简单。