2009-09-07 94 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