Py学习  »  DATABASE

如何从5[重复]重写php 7的mysql connect到mysqli函数

Phil Hedtmann • 4 年前 • 1439 次点击  

基于下面我用于普通MySQL的代码,我如何将其转换为使用MySQLI?

它是否和更改**mysql_查询($sql)一样简单? mysqli查询($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;
}
?>
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38129
 
1439 次点击  
文章 [ 9 ]  |  最新文章 4 年前
slfan Kikloo
Reply   •   1 楼
slfan Kikloo    6 年前

您可以使用notepad++进行大量查找和替换,它对我很有用:

查找:mysql_

替换:mysqli_

查找:\u查询(

替换:查询($conn,

以下内容需要更改,但这取决于您的连接方式…

将config.php中的连接字符串更新为:

$conn = mysqli_connect($db_host, $db_username, $db_password, $db_name) or die("Unable to Connect");

希望这有帮助。

user889030
Reply   •   2 楼
user889030    8 年前

将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
Meloman
Reply   •   3 楼
Meloman    5 年前

这里有一个完整的教程如何使它正确和快速。 我在为我的客户从5.4升级托管之后使用了它(omg!!!!)到7.x PHP版本。

1。连接定义

首先,您需要将连接放到一个新变量上 $link $con 或者任何你想要的。

例子

从以下位置更改连接:

@mysql_connect($host, $username, $password) or die("Error message...");
@mysql_select_db($db);

@mysql_connect($host, $username, $password, $db) or die("Error message...");

到:

$con = mysqli_connect($host, $username, $password, $db) or die("Error message...");

2。mysql修改

使用记事本+我使用“在文件中查找”(ctrl+shift+f):

Search and replace notepad++ box

按以下顺序 我选择“在文件中替换”:

  1. mysql_query(->mysqli_query($con,

  2. mysql_error()->mysqli_error($con)

  3. mysql_close()->mysqli_close($con)

  4. mysql_uugt;mysqli_

三。调整

如果您遇到错误,可能是因为您的$con无法从您的函数中访问。

您需要添加 global $con; 在所有功能中,例如:

function my_function(...) {
    global $con;
    ...
}

希望有帮助。

Esty Shlomovitz
Reply   •   4 楼
Esty Shlomovitz    6 年前

如果您的项目中有很多文件需要更改,您可以创建与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;
       }
}
Davide Alberani Svetoslav
Reply   •   5 楼
Davide Alberani Svetoslav    6 年前

对于大型项目,需要更改的文件很多,如果以前的项目版本是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;
    }
}
Aiden Bell
Reply   •   6 楼
Aiden Bell    14 年前

我暂时推荐使用 PDO 用于SQL访问。

然后,只需要更改驱动程序并确保SQL在新的后端上工作。理论上。数据迁移是另一个问题。

抽象数据库访问非常好。

Martin Notflip
Reply   •   7 楼
Martin Notflip    5 年前

最简单的方法就是我总是在

 $con = mysqli_connect($serverName,$dbusername,$dbpassword);

按以下顺序更换3个步骤

  1. 所有“ mysql_select_数据库( “带” mysqli_select_db($con,
  2. 所有“ mysql_查询( “带” mysqli_查询($con, “和
  3. 所有“ 米斯洛 “带” mysqli公司_ “。

每次都这样

TigerhawkT3
Reply   •   8 楼
TigerhawkT3    8 年前

(我意识到这是旧的,但它仍然会出现…)

如果你换了 mysql_* 具有 mysqli_* 然后记住 mysqli公司_* 函数需要传递数据库链接。

例如。:

mysql_query($query)

变成

mysqli_query($link, $query)

也就是说,需要进行大量的检查。

AbraCadaver Delan Azabani
Reply   •   9 楼
AbraCadaver Delan Azabani    5 年前

首先要做的可能是替换 mysql_* 函数调用及其等价项 mysqli_* 至少,如果您愿意使用过程API——这将是更简单的方法,因为您已经有了一些基于mysql API的代码,这是一个过程API。

为了解决这个问题, The MySQLi Extension Function Summary 肯定是有帮助的。

例如:

注意:对于某些函数,您可能需要仔细检查参数:可能这里和那里有一些差异——但不是那么多,我想说:MySQL和MySQLI都是基于同一个库的 (libmysql;至少对于php<=5.2)

例如:

  • 对于MySQL,您必须使用 mysql_select_db 连接后,指示要在哪个数据库上执行查询
  • 另一方面,mysqli允许您将该数据库名称指定为 mysqli_连接 .
  • 不过,还有一个 mysqli_select_db 如果您愿意,可以使用的功能。


完成后,尝试执行脚本的新版本…检查是否一切正常,如果没有…捕虫时间;-)