PHPで非推奨のmysql拡張機能を使用してプリペアドステートメントを使用することは可能ですか?すぐにmysqliまたはPDOを取得しないサーバーがあり、ユーザーが指定したテキストに対してRLIKEルックアップを実行する必要があります。mysql_real_escape_string()が使用されますが、それでは不十分であることが心配でした。
1043 次
2 に答える
2
これは、非推奨のmysql APIを使用したPHPスクリプトで、PREPAREとEXECUTEの使用方法を示しています。私はこれをPHP5.3.15とMySQL5.5.29でテストしましたが、うまくいきました。ただし、お勧めしません。
<?php
$x = 3;
$y = 4;
mysql_connect('localhost', 'root', 'xxxx') or die(mysql_error());
mysql_select_db('test');
mysql_query("SET @sql = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse'");
mysql_query("PREPARE stmt FROM @sql");
mysql_query("SET @x = $x"); // SQL injection!
mysql_query("SET @y = $y"); // SQL injection!
$result = mysql_query("EXECUTE stmt USING @x, @y");
while ($row = mysql_fetch_assoc($result)) {
print $row["hypotenuse"] . "\n";
}
mysql_close();
コメントで述べたように、この種のクエリは、信頼できない可能性のあるコンテンツをSETステートメントに補間する必要があるため、準備されたクエリのポイントを見逃します。
PHPのインストールを修正し、mysqliまたはPDO_mysql拡張機能を有効にして、実際のAPIレベルの準備と実行を使用できるようにする必要があります。
于 2013-03-05T00:11:16.567 に答える
0
これを見てください:http: //dev.mysql.com/doc/refman/5.0/en/sql-syntax-prepared-statements.html
手動のパラメータバインディングを使用したプリペアドステートメントのSQL構文があります。
于 2013-03-04T23:31:34.933 に答える