Jms*_*Bnd 21 php mysql connection mysqli
我有一个我以前用于脚本的函数.openDBConn()而closeDBConn()这些都被称为mysql_connect()功能.使用如下所示
openDBConn();
$car_model = getCarModel($car_id);
$car_color = getCarColor($car_id);
closeDBConn();
Run Code Online (Sandbox Code Playgroud)
这样做也允许我做以下事情
openDBConn();
mysqlStartTranscation();
upgradeCarColor($car_id);
addNewWing($car_id);
mysqlCommit();
closeDBConn();
Run Code Online (Sandbox Code Playgroud)
现在的困境是,如果我转移到mysqli,我将需要传递连接链接.
我还看到mysql_*被弃用了我的问题:
She*_*rif 14
首先,从PHP 5.5.0开始不推荐使用旧的ext/mysql,但它永远不会完全停止工作,因为扩展本身最终会被移动到PHP PECL存储库中(当需要删除它时).但是,我们还没有,只有当您选择升级到该版本的PHP时才会受到影响.没有确定的时间来删除扩展名.
其次,您可以使用变量来存储数据库连接,就像旧的ext/mysql扩展在幕后为您做的那样.诀窍是你不知道它在做什么(它使用你在调用mysql_connect时创建的最后一个打开的连接,并在每次调用类似mysql_query的东西时使用它来访问数据库).
您可以使用程序样式在函数中使用静态变量执行此操作....
function openDBConn() {
static $link;
if (!isset($link)) {
$link = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
}
return $link; // returns the link
}
Run Code Online (Sandbox Code Playgroud)
或者您可以使用OOP使用类静态变量执行此操作...
Class MyDBConnect {
public static $link;
public function openDBConn() {
if (!isset(static::$link)) {
static::$link = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想鼓励你使用更新的API,我赞扬你,但我也想在你前进时提醒你.当您开始将函数从旧的ext/mysql函数移植到新的mysqli扩展时,请注意不要同时移植旧扩展的错误做法(例如使用旧的SQL字符串连接和转义技术ext/mysql提供).而是利用MySQLi 预处理语句和参数化查询.
我想要引起你注意的是使用较新的API与MySQL数据库(即PDO和MySQLi)连接的好处.