2013-03-16 80 views
3

我剛剛開始使用MYSQLi而不是MYSQL,而且我遇到了一個很大的煩惱:必須連接到數據庫的每一個查詢等。爲什麼我現在不需要在舊的MYSQL中執行此操作?或者有沒有辦法做到這一點?使用Mysqli:有沒有辦法不必連接數據庫每一個查詢?

幾個例子:

MySQL的:

mysql_query("SELECT id FROM table"); 

現在的mysqli我總是要做到:

mysqli_query($db, "SELECT id FROM table"); 

我也有這樣做:

mysqli_last_id($db); 

mysqli_real_escape_string($db); 

我試圖找到這一整夜的答案,但我找不到任何東西。

+2

發現MySQL擴展試圖重用在全球範圍內與'mysql_connect'所做的最新的連接。在同一個腳本中處理多個連接時,這是不直觀和危險的。這是它被棄用的原因之一。你應該真的使用MySQLi的面向對象版本,創建一個數據庫對象並通過腳本重用它。 – Tchoupi 2013-03-16 02:30:44

+0

創建您自己的數據庫類,面向救援的OOP! – tttony 2013-03-16 02:32:35

回答

3

有一些事情要澄清

  1. 您不必連接每次。連接到數據庫是不同的事情,當你調用mysqli_connect()時,你應該只執行一次一次每個應用程序。
  2. 所以,你說的只是使用連接資源變量。
  3. 是的,你必須在每個函數中傳遞它。沒什麼大不了的,沒什麼好說的。
  4. 唯一的問題可能是變量作用域。在一個函數內使用global $db;
  5. 剛剛機械地轉向mysqli,使用舊功能舊方式絕對沒有意義。如果你想繼續在應用程序代碼中使用mysqli_real_escape_string - 不要麻煩轉換,並保持與MySQL。
  6. 移動的唯一原因(雖然很弱) - 使用準備好的語句。
  7. 的mysqli的準備語句的支持是可怕的
  8. 所以,最好退出mysqli的,去PDO
  9. 然而,使用原始API函數,無論是MySQL中,庫MySQLi或PDO,是醜陋的。必須採用一些抽象庫來代替在應用程序代碼中使用。
0

Yeap,不要使用mysql_ *函數,它們已被棄用。使用PDO,而不是

http://www.php.net/manual/es/pdo.construct.php

$pdo = new PDO(/* Connection options */); 

$rows = $pdo->query("SELECT * FROM table")->fetchAll(PDO::FETCH_OBJ); 

foreach ($rows as $row) { 
    print_r($row); 
} 

$pdo->query("INSERT INTO table SET field1 = 'value1'"); 
+0

我使用'MySQLi_'而不是'MySQL_' – 2013-03-16 16:27:07

+0

它幾乎相同...使用更好,PDO。 [但最後,我認爲這是一個人物角色的決定...](http://net.tutsplus.com/tutorials/php/pdo-vs-mysqli-which-should-you-use/) – Cito 2013-03-17 01:19:23

相關問題