php7.0拋棄mysql_connect()後的解決方案 升級到mysqli_connect()

PHP7.O完全拋棄了mysql_connect() , 藉口是不安全 , 實際是從PHP7.0這個版本起 , 一邊倒的奔跑在全面抄襲JAVA路上 .php

那麼 , 如何平滑升級呢 :mysql

PHP5.X時 , 使用mysql_connect()的方式以下:sql

//鏈接數據庫 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()的方式以下:安全

//鏈接數據庫 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是關鍵字 .fetch

[4] mysqli_query($db_cn , "SET NAMES 'UTF8'") 有兩個參數 , 強制性的 , 沒有會報錯 , 一是數據庫鏈接 , $db_cn , 二是sql拼接 .spa

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

相關文章
相關標籤/搜索