2017-02-04 7 views
-2

この質問については何も見つかりませんでした。 mysqli_escape_stringをsql文の中に含めることにしました。そうしないと、たくさんの変数を使用する必要があったからです。だから私の質問は、このコードが有効かどうかです:php関数をSQLクエリに渡す

$sql = "UPDATE users SET 
rank = 'mysqli_escape_string($_SESSION['rank'])' 
WHERE some condition"; 
+0

使用パラメータの代わりに。それははるかに賢明です。 –

答えて

0

このような値をパラメータとして渡す必要があります。それがあなたが望むことをする正しい方法です。しかし、あなただけのクエリ文字列のmungeことができます:「そう、私は変数のトンを使用しなければならないでしょう」:

$sql = "UPDATE users 
SET rank = '".mysqli_escape_string($_SESSION['rank'])."' 
WHERE some condition"; 

を私はこれを理解していません。

+0

ありがとう!変数について...私がそれをやったのは、$ some_var = mysqli_escape_string($ something)でした。そして、私はたくさんのものを保存する必要があるので、多くの変数が必要です。どのようにパラメータとして渡すのですか?どういう意味ですか? –

0

いいえ、あなたは(も、あなたがmysqli_real_escape_stringに$リンクを渡す必要があり注意)このように、真ん中に機能を入れて連結を使用しなければならないでしょう:

$sql = "UPDATE users SET 
rank = '" . mysqli_real_escape_string($link, $_SESSION['rank']) . "' 
WHERE some condition"; 

それはパラメータを使用して、より良い練習だがこのようにすべての値に対して手動でmysqli_real_escape_stringを使用するかのようにバインドするのではなく、1つを忘れてセキュリティホールを作成するのは簡単です。結合パラメータ(これはMySQLiをを使用してのオブジェクト指向スタイルであることに注意)で、このクエリを実行する

:PHPがするのでmysqli_escape_stringは、二重引用符の内側にあるので

$stmt = $mysqli->prepare("UPDATE users SET rank = ? WHERE some condition"); 
$stmt->bind_param('s', $_SESSION['rank']); 

// Run query 
$stmt->execute(); 
0

いや、そのコードは、有効ではありません文字列の一部として参照し、実行しないでください。

機能を有効にする1つの方法は、関数が文字列の外側になるように、両括弧を前後に配置することです。この例では、ランクがテキストの場合は、内部に単一引用符を追加しています。この例では

$sql = "UPDATE users SET rank = '".mysqli_escape_string($_SESSION['rank'])."' WHERE some condition"; 

、$ _SESSION [ 'ランク'] = '金' は$ SQLは次のようになり場合:

UPDATE users SET rank = 'gold' WHERE some condition