我正在努力解決以下問題。幾年前,我寫了一個函數來檢索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中,此代碼似乎不再工作。很多搜索後,我來到了這個作爲替代,但遺憾的是它不工作:
function MultipleRows($query)
{
$mysqli = new mysqli($dbhost, $dbpass, $dbuser, $dbname);
$result = mysqli_fetch_all($mysqli->query($query), MYSQLI_ASSOC);
return $result;
$mysqli->close();
}
功能是指具有代碼工作是這樣的:
$res_test = MultipleRows("SELECT id, name FROM table");
if($res_test)
{
while($res = mysql_fetch_array($res_test))
{
echo $res['id'].' '.$res['name'];
}
}
這不是一個好選項來重寫「顯示代碼」(最後一個片段),因爲在這種情況下,我必須在我的網站上重寫很多行。誰能給我一些幫助?提前致謝!
感謝您的幫助!你的函數返回我想要的值,但不幸的是不是我希望的方式。我只能用foreach循環而不是while循環來顯示它們。有沒有辦法改變它?爲什麼它是一個脆弱的方式? –
呃,我錯過了你的問題的最後一行 - 你只是不能在PHP 7中使用mysql_fetch_array'。想到兩種解決方案:1)重寫代碼使用'foreach'而不是'while ... mysql_fetch_array' ; 2)編寫一個庫,爲你提供'mysql_ *'函數(它必須在內部使用'PDO'或'mysqli')。 –
關於SQL注入攻擊的漏洞 - 當使用函數'MultipleRows'時,你無法利用[prepared語句]提供的安全性(http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)或'mysqli_real_escape_string()' –