社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

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

Phil Hedtmann • 7 年前 • 3707 次点击  

基于下面我用于普通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
文章 [ 9 ]  |  最新文章 7 年前
slfan Kikloo
Reply   •   1 楼
slfan Kikloo    8 年前

您可以使用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    10 年前

将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    8 年前

这里有一个完整的教程如何使它正确和快速。 我在为我的客户从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    9 年前

如果您的项目中有很多文件需要更改,您可以创建与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    8 年前

对于大型项目,需要更改的文件很多,如果以前的项目版本是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    16 年前

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

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

抽象数据库访问非常好。

Martin Notflip
Reply   •   7 楼
Martin Notflip    7 年前

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

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

按以下顺序更换3个步骤

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

每次都这样

TigerhawkT3
Reply   •   8 楼
TigerhawkT3    11 年前

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

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

例如。:

mysql_query($query)

变成

mysqli_query($link, $query)

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

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

首先要做的可能是替换 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 如果您愿意,可以使用的功能。


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