2009-09-07 31 views
35

根據下面的代碼我使用普通的mysql,我怎麼能將它轉換爲使用mysqli?如何將mysql更改爲mysqli?

它是像更改** mysql _query($ sql);到mysqli _query($ sql); ?**

<?PHP 

//in my header file that is included on every page I have this 
$DB["dbName"] = "emails"; 
$DB["host"] = "localhost"; 
$DB["user"] = "root"; 
$DB["pass"] = ""; 
$link = mysql_connect($DB['host'], $DB['user'], $DB['pass']) or die("<center>An Internal Error has Occured. Please report following error to the webmaster.<br><br>".mysql_error()."'</center>"); 
mysql_select_db($DB['dbName']); 
// end header connection part 

// function from a functions file that I run a mysql query through in any page. 
function executeQuery($sql) { 
    $result = mysql_query($sql); 
    if (mysql_error()) { 
     $error = '<BR><center><font size="+1" face="arial" color="red">An Internal Error has Occured.<BR> The error has been recorded for review</font></center><br>'; 
     if ($_SESSION['auto_id'] == 1) { 
      $sql_formatted = highlight_string(stripslashes($sql), true); 
      $error .= '<b>The MySQL Syntax Used</b><br>' . $sql_formatted . '<br><br><b>The MySQL Error Returned</b><br>' . mysql_error(); 
     } 
     die($error); 
    } 
    return $result; 
} 

// example query ran on anypage of the site using executeQuery function 
$sql='SELECT auto_id FROM friend_reg_user WHERE auto_id=' .$info['auto_id']; 
$result_member=executequery($sql); 
if($line_member=mysql_fetch_array($result_member)){ 
    extract($line_member); 
} else { 
    header("location: index.php"); 
    exit; 
} 
?> 

回答

59

首先要做的第一件事可能是將每個mysql_*函數調用替換爲其相應的mysqli_*,至少如果您願意使用過程API - 考慮到您已經有一些基於代碼的方法在MySQL API上,這是一個程序化的API。

爲了解決這個問題,The MySQLi Extension Function Summary絕對是有幫助的。

例如:

請注意,對於某些功能,您可能需要仔細檢查參數:也許這裏和那裏有一些差異 - 但沒有那麼多,我會說:mysql和mysqli都基於相同的庫( libmysql;至少對於PHP < = 5.2)

例如:

  • 與MySQL,你必須使用一旦連接mysql_select_db,以表明你想要做你的查詢
  • mysqli的哪個數據庫,另一方面,允許您將該數據庫名稱指定爲mysqli_connect的第四個參數。如果您願意,還可以使用mysqli_select_db函數。


一旦你做完這些後,嘗試執行腳本的新版本...並檢查是否一切正常;如果沒有...錯誤狩獵的時間;-)

+0

只要你想保持程序代碼,從mysql切換到mysqli不應該太難;但是,如果您的代碼庫不是太大(即從一個API到另一個API並不意味着太多的工作),則可能需要使用面向對象的API;它需要更多的工作,但是...如果要全面改寫OO-API,我會選擇使用PDO而不是mysqli ... – 2009-09-07 19:10:01

+0

我的意思是整天讀2,我明白並不是PDO的主要區別,PDO允許您使用不同的數據庫系統。如果這是唯一的好處,那麼在我的情況下它不會有太大的幫助,因爲我將永遠不需要爲此應用程序提供不同的幫助。 – JasonDavis 2009-09-07 19:13:57

+0

在這種情況下,mysqli可能會很好:-),特別是你已經有一些建立在mysql上的代碼。 – 2009-09-07 19:24:40

3

我暫時推薦使用PDO來進行SQL訪問。

然後,它只是一個更改驅動程序,並確保SQL在新的後端工作的情況。理論上。數據遷移是一個不同的問題。

抽象數據庫訪問非常好。

25

(我意識到這是舊的,但它仍然出現...)

如果您確實將mysql_*替換爲mysqli_*請記住整個負載函數需要傳遞數據庫鏈接。

例如爲:

mysql_query($query) 

成爲

mysqli_query($link, $query) 

即,大量的檢查需要的。

0

轉換的MySQL的短版的mysqli

mysql_connect ---> mysqli_connect 
mysql_select_db ---> mysqli_select_db 
mysql_error ---> mysqli_connect_error() 
mysql_query ---> mysqli_query 
mysql_fetch_assoc ---> mysqli_fetch_assoc 
6

我總是處理這個

其中$ CON = mysqli_connect($服務器名,$數據庫用戶名,$ DBPASSWORD)最簡單的方法;

3個步驟更換按以下順序

  1. 所有 「mysql_select_db(」 與 「mysqli_select_db($ CON,
  2. 所有 「的mysql_query(」 與「mysqli_query($ con,「和
  3. 全部」mysql_「與」mysqli_「。

這對我的作品每次

+0

我會添加搜索所有'function'字符串並在函數內容的頂部放置'global $ con;',因爲在函數外定義的$ con'不會由於PHP中的變量範圍,默認情況下可用。 – 2017-10-01 15:14:01

1

如果你有很多文件在您的項目來改變您就可以使用MySQL的功能, 並在功能相同的名稱創建功能,讓這樣的代碼轉換:

$sql_host =  "your host";  
$sql_username = "username";  
$sql_password = "password";  
$sql_database = "database";  



$mysqli = new mysqli($sql_host , $sql_username , $sql_password , $sql_database); 


/* check connection */ 
if ($mysqli->connect_errno) { 
    printf("Connect failed: %s\n", $mysqli->connect_error); 
    exit(); 
} 


function mysql_query($query){ 
    $result = $mysqli->query($query); 
    return $result; 

} 

function mysql_fetch_array($result){ 
    if($result){ 
     $row = $result->fetch_assoc(); 
     return $row; 
     } 
} 

function mysql_num_rows($result){ 
    if($result){ 
     $row_cnt = $result->num_rows;; 
     return $row_cnt; 
     } 
} 
0

在大項目的情況下,許多文件改變並且如果PHP以前的項目版本爲5.6,而新的7.1,你可以創建一個新的文件sql.php並將其包含在頭或者你一直在使用它並需要sql連接的地方。例如:

//local 
$sql_host =  "localhost";  
$sql_username = "root";  
$sql_password = "";  
$sql_database = "db"; 


$mysqli = new mysqli($sql_host , $sql_username , $sql_password , $sql_database); 

/* check connection */ 
if ($mysqli->connect_errno) { 
    printf("Connect failed: %s\n", $mysqli->connect_error); 
    exit(); 
} 

// /* change character set to utf8 */ 
if (!$mysqli->set_charset("utf8")) { 
    printf("Error loading character set utf8: %s\n", $mysqli->error); 
    exit(); 
} else { 
    // printf("Current character set: %s\n", $mysqli->character_set_name()); 
} 
if (!function_exists('mysql_real_escape_string')) { 
    function mysql_real_escape_string($string){ 
     global $mysqli; 
     if($string){ 
      // $mysqli = new mysqli($sql_host , $sql_username , $sql_password , $sql_database);    
      $newString = $mysqli->real_escape_string($string); 
      return $newString; 
     } 
    } 
} 
// $mysqli->close(); 
$conn = null; 
if (!function_exists('mysql_query')) { 
    function mysql_query($query) { 
     global $mysqli; 
     // echo "DAAAAA"; 
     if($query) { 
      $result = $mysqli->query($query); 
      return $result; 
     } 
    } 
} 
else { 
    $conn=mysql_connect($sql_host,$sql_username, $sql_password); 
    mysql_set_charset("utf8", $conn); 
    mysql_select_db($sql_database); 
} 

if (!function_exists('mysql_fetch_array')) { 
    function mysql_fetch_array($result){ 
     if($result){ 
      $row = $result->fetch_assoc(); 
      return $row; 
     } 
    } 
} 

if (!function_exists('mysql_num_rows')) { 
    function mysql_num_rows($result){ 
     if($result){ 
      $row_cnt = $result->num_rows;; 
      return $row_cnt; 
     } 
    } 
} 

if (!function_exists('mysql_free_result')) { 
    function mysql_free_result($result){ 
     if($result){ 
      global $mysqli; 
      $result->free(); 

     } 
    } 
} 

if (!function_exists('mysql_data_seek')) { 
    function mysql_data_seek($result, $offset){ 
     if($result){ 
      global $mysqli; 
      return $result->data_seek($offset); 

     } 
    } 
} 

if (!function_exists('mysql_close')) { 
    function mysql_close(){ 
     global $mysqli; 
     return $mysqli->close(); 
    } 
} 

if (!function_exists('mysql_insert_id')) { 
    function mysql_insert_id(){ 
      global $mysqli; 
      $lastInsertId = $mysqli->insert_id; 
      return $lastInsertId; 
    } 
} 

if (!function_exists('mysql_error')) { 
    function mysql_error(){ 
     global $mysqli; 
     $error = $mysqli->error; 
     return $error; 
    } 
} 
+0

和我應該如何使用這個來測試mysqli函數?例如,你的文件首先檢查mysql_query是否退出,如果用於5.6,但如何測試mysqli_query是否工作? – alex 2018-02-04 10:18:00

+0

我該如何解釋測試mysqli_query(???,$ q); – alex 2018-02-04 10:34:13

+0

並使用它:

 $id_cat = (int)'4'; $sql = "DELETE FROM categories WHERE id='$id_cat' OR parent_id ='$id_cat'"; mysql_query($sql) or die('Error SQL !
'.$sql.'
'.mysql_error());
Svetoslav 2018-02-06 14:49:07