0

私はこれに悲しみを感じており、助けていただければ幸いです。私は次のことを試しました:

$result = mysql_query("SELECT this FROM that WHERE tFirstName = $_SESSION['FirstName'] And tLastName = $_SESSION['LastName']");

しかし、「予期しない T_ENCAPSED_AND_WHITESPACE、T_STRING または T_VARIABLE が必要です」というエラーが表示されます。

セッション変数を二重引用符と一重引用符で囲む方法をいくつか試しましたが、常にエラーが発生するようです。

最終的に私はそれをあきらめ、事前に $fn と $ln に設定し、それをクエリで使用しました。

$result = mysql_query("SELECT this FROM that WHERE tFirstName = '$fn' And tLastName = '$ln'");

これはうまくいきました...姓がO'Reillyのユーザーに出くわすまでは、名前の一重引用符が壊れています!

ヘルプ!これを回避する方法はありますか?

4

5 に答える 5

2

変数を SQL クエリで使用する前に、変数をエスケープする必要があります。そうしないと、悪いことが起こる可能性があります (SQL インジェクション! 1 )。を使用しているのでmysql_、これを行うことができます。

$fn = mysql_real_escape_string($_SESSION['FirstName']);
$ln = mysql_real_escape_string($_SESSION['LastName']);

$result = mysql_query("SELECT this FROM that WHERE tFirstName = '$fn' And tLastName = '$ln'");

これはまさに、使用をやめて(または)mysql_に切り替える理由です! これらを使用すると、「準備されたクエリ」を使用でき、再びエスケープすることを心配する必要はありません (自動的に実行されます)。このページを参照してください: http://us2.php.net/manual/en/mysqlinfo.api.choosing.phpPDOmysqli

切り替えると、 または のいずれかが必要になり$mysqli->prepareます$dbh->prepare

1 SQL インジェクションについては、http: //bobby-tables.com/を参照してください。

于 2013-04-17T19:20:42.243 に答える