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目前测试正常 .