-4

我知道我们可以在 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 Internal Server Error:

<?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_ 函数:)

4

1 回答 1

-2

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

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

它应该可以工作。而且它易于阅读代码,也很简单。

于 2012-05-01T19:36:34.500 回答