2011-01-08 90 views
1

嗨,大家好,我最近聽說準備好的聲明是保護我的網站免受mysql注入攻擊的最佳方式,而不是。所以,我有一個問題,我似乎無法理解爲什麼這不起作用:準備好的語句幫助

$mysqli=new mysqli("localhost", "***", "***","***") or die(mysql_error()); 


       function checklogin($username, $password){ 


       $result = $mysqli->prepare("SELECT * FROM users WHERE username = ?"); 
       $result->bind_param("s", $username); 
       $result->execute(); 

我得到以下錯誤:注意:未定義的變量:mysqli的在/var/www/JMToday/loginchk.php上第45行致命錯誤:調用一個成員函數prepare()一個非對象在/var/www/JMToday/loginchk.php上45行

回答

3

你試圖在一個全局變量($ mysqli)中使用一個全局變量一個函數。 (錯誤消息「未定義的變量」是難以置信見地在這種情況下)。

你要麼需要:

  1. 變量聲明爲一個全球性的。 (即:將「global $mysqli;」添加爲checklogin函數中的第一行)。

  2. 將$ mysqli的定義移動到checklogin函數中。

作爲一般性建議,我建議您閱讀PHP手冊的variable scope部分。