-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内部サーバーエラーで変更はありません:

<?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 を使用する必要があることを学びました:)

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 に答える