2017-07-17 55 views
-1

連接文件是如下這mysqli的查詢就mysqli_connect

$host="localhost"; 
$username="root"; 
$password="123"; 
$database = "order"; 
$con = mysqli_connect($host, $username, $password, $database); 
$sel_db=mysqli_select_db($con,$database) or die("Cannot Select Database"); 

在每個文件中包括我上面的連接文件

我對MySQL的老代碼,就像

mysql_query("select * from order_detail"); 

和新的查詢mysqli如下

mysqli_query($con,"select * from order_detail"); 

上面的查詢需要$ CON連接

mysql_fetch_array($var)成爲mysqli_fetch_array($var)並不需要$ CON

mysql_real_escape_string($var)成爲mysql_real_escape_string($con,$var);

所以我的問題是,該查詢所需$ CON作爲連接

+0

如果只有一個網站記錄了這個... http://php.net/manual/en/book.mysqli.php – David

+0

你是什麼意思的至極查詢?我建議你使用MySQLi的準備好的語句函數而不是'mysqli_query();' – Jer

回答

0

如果沒有明確給出連接,mysql函數將隱式使用最後一次連接。請注意,您可以傳遞連接,甚至可以傳遞舊功能,因爲您可以read here。這種行爲令人困惑且容易出錯,所幸他們在mysqli函數中更加明確。

雖然我不確定這是主要原因。這可能與mysqli也有一個對象語法的事實有關,並且這個語法包含另一個語法。過程版本中的$con變量和目標版本中的對象實例都具有相同的目的:告訴函數/方法使用哪個連接。其實,the doc says對於mysqli_query連接參數是一個mysqli的對象實例,所以mysqli_query可能只是像這樣的包裝函數來實現,使其更容易對你的代碼從MySQL轉換到mysqli的:

function mysqli_query($link, $query, $resultmode = MYSQLI_STORE_RESULT) { 
    return $link->query($query, $resultmode); 
} 

如果你沒我無法理解我在最後一段中所說的任何話,不要擔心,這並不重要。 ;)

無論如何,雖然mysql_query在連接上執行查詢,但mysql_fetch_array從查詢中獲取值結果。您傳遞給它的$var已經包含了它所需的所有信息。它在那個時候不需要連接,因此不需要將它作爲參數傳遞。順便說一句,沒有mysqli_fetch_array。相反,您應該使用mysqli_stmt_fetch,這同樣適用:它不需要連接,而是一個聲明對象(mysqli_stmt),它表示查詢結果。

許多mysqli函數與它們的前輩具有相同或相似的參數,但可能存在差異。因此,對於您使用的每個功能,我都會檢查the official documentation

而且,我會使用IDE或編輯器,通過提供內置代碼洞察來幫助您使用函數語法。 Netbeans for PHP是一個相當複雜的免費使用,但如果你可以花一些錢,還有更好的(比如PHPStorm)。

PS:如果使用prepared statements,則可以完全清除mysql_real_escape_string

+0

你的意思是,如果我們給第一個查詢連接,那麼就不需要再提供第二個mysqli_query – LOKESH

+0

不可以。參數列表是基於實現,無論您使用哪種順序的功能。我已經擴展了我的答案,但核心是:並不是所有的函數在mysql和mysqli之間都是完全一樣的,所以你應該檢查鏈接文檔以確切地看到你需要傳遞哪些參數。 – GolezTrol