0

誰でも助けることができます。内部メッセージング サービス用に PHP に渡される値に mysql_real_escape_string を使用してセキュリティを強化しようとしていますが、値がデータベースに挿入されていないため、どこかで構文が間違っているに違いありません。チュートリアルやヘルプなどを探しましたが、うまくいくのに苦労しています。

私が使用しているコードは以下のとおりです。エスケープされていない値 ($email、$from、$time) は正しく入力されていますが、その他の値は空白で入力されています。

<?php
session_start();
$conn = mysqli_connect('localhost', 'username', 'password', 'dbname');

$email=$_SESSION['email'];
$to = $_POST ['touser'];
$toemail = $_POST['touseremail'];
$from = $_SESSION['name'];
$message = $_POST['message'];
$subject = $_POST['subject'];
$time = time();

$query ="INSERT INTO messages
(to_user, to_email, subject, message, from_user, from_email, daterecord)
VALUES (
'" . mysql_real_escape_string($conn, $to) . "', 
'" . mysql_real_escape_string($conn, $toemail) . "', 
'" . mysql_real_escape_string($conn, $subject) . "', 
'" . mysql_real_escape_string($conn, $message) . "', 
'$from', '$email', '$time')";
$send = $conn -> query($query);

echo "Message sent!";

?>
4

4 に答える 4

5

関数mysqli_real_escape_string()を確認してください

また、最近の文字列をエスケープするための推奨される方法は、パラメーター バインディングであることにも注意してください。

于 2013-03-27T15:38:57.527 に答える
1

mysql_real_escape_stringの代わりに使用していmysqli_real_escape_stringます。
それを修正すると、よりうまく機能します!

于 2013-03-27T15:39:11.540 に答える
0

あなたが抱えている実際の問題は、mysql拡張機能と拡張機能を混同していることですmysqli

を使用している場合は、使用mysqli_connect()するすべての DB 関数を開始する必要がありますmysqli_

mysql_real_escape_string実際に必要な機能が であるときに、を使用していますmysqli_real_escape_string

それiは非常に重要です。

ただし、説明されている実際の問題を超えることを許可していただける場合は、エスケープされたクエリから離れて、代わりにパラメーター化されたクエリを使用することをお勧めします。

パラメーター化されたクエリは、次のようなクエリを指定できる手法です。

SELECT fieldname from talbe WHERE arg = ? AND arg2 = ?

?を使用して、これらの を変数に置き換えますmysqli_bind_param()

この手法は、エスケープ文字列を使用するよりもはるかに優れた手法と考えられています。

それが役立つことを願っています。

于 2013-03-27T15:43:58.013 に答える
0

代わりに関数mysqli_real_escape_string()を使用してください

ドキュメント: http://www.php.net/manual/en/mysqli.real-escape-string.php

于 2013-03-27T15:40:24.793 に答える