2

PHPで非推奨のmysql拡張機能を使用してプリペアドステートメントを使用することは可能ですか?すぐにmysqliまたはPDOを取得しないサーバーがあり、ユーザーが指定したテキストに対してRLIKEルックアップを実行する必要があります。mysql_real_escape_string()が使用されますが、それでは不十分であることが心配でした。

4

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