2020/12/26 11:32

PHP7.0彻底抛弃了mysql_connect() , 借口是不安全 , 实际是从PHP7.0这个版本起 , 一边倒的奔跑在全面抄袭JAVA路上 .

那么 , 如何平滑升级呢 :


PHP5.X时 , 使用mysql_connect()的方式如下:

//连接数据库 mysql 5.X
$db_cn = mysql_connect($servername , $dbusername , $dbpassword) OR die ('我们有个大麻烦!---> 无法登录MYSQL服务器!');
mysql_select_db($dbname , $db_connect) OR die('我们有个大麻烦!---> 无法连接数据库!');

//设置数据库格式为UTF8
mysql_query("SET NAMES 'UTF8'");

因为mysql_query()是默认连接上一次数据库 , 而mysql_connect()能与PHP同步释放 , 这样就有两个好处 , 一是无需写mysql_close() , 因为是由PHP自动close的 , 二是mysql_query()可以在任意层级的函数里可以随意使用 , 非常方便 , 故尔虽然PHP5.X早就有mysqli和PDO , 但是大部分程序仍然坚持使用mysql_connect()来连接数据库  .

PHP7.X时 , 升级 , 使用mysqli_connect()的方式如下:

//连接数据库 mysql 7.0
$db_cn = mysqli_connect($servername , $dbusername , $dbpassword , $dbname) OR die ('我们有个大麻烦!---> 无法登录MYSQL服务器!');

//$db_cn转为全局变量
global $db_cn;

//设置数据库格式为UTF8 
mysqli_query($db_cn , "SET NAMES 'UTF8'");

//函数内调用mysqli_query
function test(){
    $sql = "SET NAMES 'UTF8'";

    //$GLOBALS['db_cn']这里为函数内调用全局变量$db_cn的方式
    mysqli_query($GLOBALS['db_cn'] , $sql);
}

其中:

[1] mysqli_connect($servername , $dbusername , $dbpassword , $dbname)相较mysql_connect()后面多了一个参数为数据库名 .

[2] mysqli_select_db() 多余 , 不需要了 , 删除 .

[3] global $db_cn; 升$db_cn为全局变量 , global是关键字 .

[4] mysqli_query($db_cn , "SET NAMES 'UTF8'") 有两个参数 , 强制性的 , 没有会报错 , 一是数据库连接 , $db_cn , 二是sql拼接 .

[5] 在函数内使用则为mysqli_query($GLOBALS['db_cn'] , $sql) , 其中$GLOBALS['db_cn']是对全局变量$db_cn的调用 , 直接写mysqli_query($db_cn , $sql)是错误的 , 升级时 , 这里是关键 , 将前写法 mysql_query($sql) 替换为 mysqli_query($GLOBALS['db_cn'] , $sql) , 即 替换 "mysql_query(" 为"mysqli_query($GLOBALS['db_cn'] , " .

[6] mysql_fetch_array($result , MYSQL_ASSOC) 应用 mysqli_fetch_array($result , MYSQLI_ASSOC)来替换 , 注意后面的参数 MYSQLI_ASSOC .

[7] 其他的 mysql_* 函数基本能用 mysqli_* 来替代 , 没时间测试 , 请诸位自己摸索 .

[8] mysqli_connect()是持久连接 , 在PHP程序尾部需要增加 mysqli_close() 关闭数据库连接 .

尾记:
以上是个人认为最平滑的升级方式 , 于2019年07月07日升级老程序后在WAMP下PHP7.0目前测试正常 .