2014-01-27 25 views
1

我正面臨着使用mysqli與mysql的現實。我上http://us3.php.net/mysqli_real_escape_string和由閱讀PHP手冊參考後使用的MySQLPHP - 使用mysqli返回一個空字符串

Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in... 

時具有以下功能消毒代碼是如何使用的MySQL

function sanitize($data){ 
     return htmlentities(strip_tags(mysql_real_escape_string($data))); 
    } 

錯誤消息數據

這是以下變化...

function sanitize($data){ 
     return htmlentities(strip_tags(mysqli_real_escape_string($data, '0'))); 
    } 

...我收到以下錯誤信息使用的mysqli

Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, string given in.... 

這是現在阻止我在登錄後,任何幫助,不勝感激!

+0

你讀'$ mysqli的鏈接,串$ escapestr'手冊中,並更改您的代碼'$的數據,「0 「'?如果您無法理解手冊的語法,有很多例子。 –

+0

是的!我一直在學習PHP 2個月了......我知道這可能看起來並不明智!我的道歉,我希望我能更快,更快地掌握這件事。有時候這並不容易,尤其是當我正在學習教程時。舉手是一種很好的學習方式,但需要一段時間才能掌握正在開發的邏輯。正如我所說的道歉... – user3001162

+1

順便說一下,你的函數被稱爲'sanitize()',但更合適的名稱將是'mangle()'或'corrupt()'。如果你在教程中閱讀過,我建議你找到另一個參考文本 - 這段代碼沒有任何意義。 –

回答

1

manual

string mysqli_real_escape_string (mysqli $link , string $escapestr) 

爲什麼你需要的數據庫連接逃避字符串?需要

字符串轉義函數知道編碼你的數據庫連接使用正確轉義字符串。所以你必須把連接傳遞給函數。

功能mysqli_real_escape_string($mysqli, $str)中有這樣的事情:

$encoding = $mysqli->getConnectionEncoding(); 

這就是爲什麼你必須通過連接。

這家現代化的設計模式(傳遞是通過構造函數或函數的PARAM需要一個類裏面的東西)被稱爲依賴注入(短DI模式)。


一個尚未更好的方式是使用OOP風格:

$con   = new mysqli(); 
$escapedString = $con->real_escape_string($string); 
4

Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli是非常自我解釋...

您需要提供您的mysqli實例作爲第一個參數,和你的字符串作爲第二個參數。

E.g.

mysqli_real_escape_string($mysqli_conn, $data)

+0

所以我拿它,通過init.php文件建立連接是不夠的..mysqli需要傳遞連接作爲參數。謝謝瑞恩! – user3001162

+1

除非您使用範圍解析運算符(請參閱http://www.php.net/manual/en/language.oop5.paamayim-nekudotayim.php)已經設置鏈接的'mysqli :: real_escape_string($ data)'您正在引用的實例。 – Ryan