我怎么能改变这个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; } ?>
首先要做的事情可能是将每个mysql_*
函数调用replace成与其相当的mysqli_*
,至less如果你愿意使用过程API – 这将是更简单的方法,考虑到你已经有一些基于MySQL API,这是一个程序。
为了解决这个问题, MySQLi扩展函数摘要绝对是有帮助的。
例如:
-
mysql_connect
将被mysqli_connect
所取代 -
mysql_error
将被mysqli_error
和/或mysqli_connect_error
,取决于上下文 -
mysql_query
将被mysqli_query
replace - 等等
请注意,对于某些函数,您可能需要仔细检查参数:也许这里和那里有一些差异 – 但不是那么多,我会说:mysql和mysqli都基于相同的库(libmysql; at至less对于PHP <= 5.2)
例如:
- 用mysql,你必须使用
mysql_select_db
连接一次,以表明你想要在哪个数据库上进行查询 - 另一方面,mysqli允许你指定数据库名称作为
mysqli_connect
的第四个参数。 - 不过,如果您愿意,还可以使用
mysqli_select_db
函数。
一旦你完成了,尝试执行新版本的脚本…并检查是否一切正常; 如果没有…错误狩猎的时间;-)
(我意识到这是旧的,但它仍然出现…)
如果你用mysql_*
replacemysql_*
,那么记住一整个mysqli_*
函数需要传递数据库链接。
例如:
mysql_query($query)
变
mysqli_query($link, $query)
也就是说,需要进行大量的检查。
我总是处理这个最简单的方法
$ con = mysqli_connect($ serverName,$ dbusername,$ dbpassword);
按以下顺序更换3个步骤
- 所有“ mysql_select_db( ”与“ mysqli_select_db($ con, ”
- 所有“ mysql_query( ”与“ mysqli_query($ con, ”和
- 所有“ mysql_ ”和“ mysqli_ ”。
这每次都适用于我
我暂时build议使用PDO进行SQL访问。
那么只是改变驱动程序并确保SQL在新的后端工作。 理论上。 数据迁移是一个不同的问题。
抽象数据库访问非常好。
如果您的项目中有很多文件要更改,您可以使用像mysql函数一样的名称来创build函数,并在函数中进行如下代码的转换:
$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; } }
将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