gpt4 book ai didi

php - 从 mysql 连接迁移到 mysqli

转载 作者:IT老高 更新时间:2023-10-28 23:50:00 27 4
gpt4 key购买 nike

我有一个用于我的脚本的函数。 openDBConn()closeDBConn() 这两个都调用了 mysql_connect() 函数。如下所示使用

openDBConn();
$car_model = getCarModel($car_id);
$car_color = getCarColor($car_id);
closeDBConn();

这样做也可以让我做以下事情

openDBConn();
mysqlStartTranscation();

upgradeCarColor($car_id);
addNewWing($car_id);

mysqlCommit();
closeDBConn();

现在的困境是,如果我搬到mysqli,我需要通过连接链接。

我还读到 mysql_* 正在被弃用,我的问题是:

  1. 在我的大部分功能停止工作之前,我还有多少时间?
  2. 是否有任何当前或将来访问当前 mysqli 连接的方法,因为向我的函数添加额外参数会很痛苦?
  3. 是否有任何适当的编码方式以程序方式访问当前的mysqli连接链接。如果不是在程序上,那么 OOP 方式中的最佳方式是什么?

最佳答案

  1. 您拥有世界上所有的时间,因为他们永远不会停止自己的工作!
  2. 是的,有几种方法可以做到这一点。
  3. 是的,但没有万能的解决方案。每种情况都不同,适合您特定情况的方法可能并不适合每种情况。

首先,从 PHP 5.5.0 开始,旧的 ext/mysql 已被弃用,但它永远不会完全停止工作,因为扩展本身最终将移至 PHP PECL repository 中。 (到了删除它的时候)。但是,我们还没有做到这一点,只有当您选择升级到该版本的 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
}

或者您可以使用面向对象编程的类静态变量来做到这一点...

Class MyDBConnect {

public static $link;

public function openDBConn() {
if (!isset(static::$link)) {
static::$link = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
}
}

}

我想鼓励您使用更新的 API,并为此表扬您,但我也想在您继续前进时提醒您。当您开始将您的函数从旧的 ext/mysql 函数移植到新的 mysqli 扩展时,请注意不要同时移植旧扩展的不良做法(例如使用旧的 SQL 字符串连接和转义技术 ext/mysql提供)。而是利用 MySQLi prepared statements and parameterized queries .

我想让您注意的是使用较新的 API 与您的 MySQL 数据库(即 PDO and MySQLi)交互的好处。

关于php - 从 mysql 连接迁移到 mysqli,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13776963/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com