私は次の問題を抱えています。数年前、私はMYSQLの結果(複数行)を取得する関数を書いてきました。 PHP7まで、このコードは正常に動作しました:PHP 7でmysqlの結果を取得する機能
function MultipleRows($query)
{
global $dbhost, $dbname, $dbuser, $dbpass;
mysql_connect($dbhost, $dbuser, $dbpass)
or die("Error! Couldn't <b>Connect</b>.");
mysql_select_db($dbname)
or die("Error! Couldn't <b>Select database</b>.");
$result = mysql_query($query)
or die("Error! Couldn't execute query.");
if(($result)&&(mysql_num_rows($result)>0))
{
return $result;
} else {
return false;
}
mysql_close();
}
PHP7では、このコードはもう動作していないようです。それはよくないです
$res_test = MultipleRows("SELECT id, name FROM table");
if($res_test)
{
while($res = mysql_fetch_array($res_test))
{
echo $res['id'].' '.$res['name'];
}
}
:
function MultipleRows($query)
{
$mysqli = new mysqli($dbhost, $dbpass, $dbuser, $dbname);
$result = mysqli_fetch_all($mysqli->query($query), MYSQLI_ASSOC);
return $result;
$mysqli->close();
}
関数は次のようなコードで動作するように意図されています。検索の多くの後、私はこの代替として残念ながら、それは動作しません思い付きましたオプションを使用すると、 '表示コード'(最後のフラグメント)を書き換えることができます。その場合、私は自分のウェブサイトで多くの行を書き直さなければならないからです。誰が私にこれに何か助けを与えることができますか?前もって感謝します!
助けてくれてありがとう!あなたの関数は、私が望む値を返しますが、残念なことに私が望むやり方ではありません。私はforeach-loopで表示することしかできず、while-loopで表示することはできません。それを変える方法はありますか?それはなぜ脆弱なのですか? –
質問の最後の行を拝見しませんでした。PHP 7でmysql_fetch_arrayを使うことはできません。2つの解決策が考えられます。1) 'while ... 'の代わりに' foreach'を使うようにコードを書き換えます。mysql_fetch_array' ; 2) 'mysql_ *'関数を提供するライブラリを書きます( 'PDO'または' mysqli'を内部で使用する必要があります)。 –
そして、SQLインジェクション攻撃に対する脆弱性に関しては、 'MultipleRows'関数を使用する場合、[prepared statements](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)によって提供されるセキュリティを活用することはできません。 "mysqli_real_escape_string()" –