繁体   English   中英

ADODB - 从 Mysql 切换到 Mysqli

[英]ADODB - Switch from Mysql to Mysqli

鉴于 MySQL 即将被弃用,我需要将一个使用 ADODB 的大型网站从 MySQL 迁移到 MySQLi。

现在我在 Stackoverflow 上查找了一些主题,感谢社区,我已经对需要做的事情有了一个大致的了解。 关于这个问题的最佳主题是那些:

ADODB mySQLi 连接

将大型网站从 MySQL 切换到 MySQLi

但是,我仍然需要对使用 ADODB 的特定案例进行更多说明。

这是我用来连接到数据库的内容:

define('DBHOST', 'db_host');
define('DBUSER', 'db_user'); 
define('DBPASS', 'db_pass');    
define('DBNAME', 'db_name'); 

include('adodb/adodb.inc.php');
$db = ADONewConnection('mysql');
$db->Connect(DBHOST,DBUSER,DBPASS,DBNAME) or die("Database not found!");

所以首先我要改变:

$db = ADONewConnection('mysql');

$db = ADONewConnection('mysqli');

我想这是最简单的部分。

现在,由于我正在使用 ADODB,我是否还需要将 MySQL_* 函数的所有实例更改为 MySQLi_* 或 ADODB 会自动处理此问题? 我想我知道答案,但无论如何必须问。

我最常见的 MySQL_ 函数是:

mysql_insert_id()
mysql_query()
mysql_fetch_array()
mysql_num_rows()
mysql_escape_string()
mysql_connect()
mysql_select_db()
mysql_error()

最常见的用法是$variable = mysql_insert_id(); $v1 = mysql_query($v);

从 MySQL 迁移到 MySQLi for ADODB 时,还有什么我应该考虑的吗?

“我还需要将 MySQL_* 函数的所有实例更改为 MySQLi_* 吗?”

答案是肯定的。 不同的 MySQL API/函数不会混合使用。 从连接到查询,您必须使用相同的 API/函数。

您可以使用以下函数,只需将mysql_替换为mysqli_ ,同时在需要它的函数中传递数据库连接并将其作为第一个参数。

  • mysqli_query($connection, $query)

它们标有星号*

mysqli_insert_id() - *
mysqli_query() - *
mysqli_fetch_array()
mysqli_num_rows()
mysqli_escape_string() - *
mysqli_connect() - *
mysqli_select_db() - *
mysqli_error() - *

1) 我建议你使用 pdo_mysql 而不是 mysql,因为它对事务有更好的支持。

2) ADODB 通过使用连接字符串中的 dsn 标识符(即 pdo_mysql://localhost/mydb 或 mysql://localhost/mydb)初始化正在使用的驱动程序(例如 mysql 或 pdo_mysql)。

只需在连接字符串中切换 mysql -> pdo_mysql ,它就会开始使用 mysqli -driver。

3)驱动加载逻辑位于adodb.inc.php的~4860行,至少在我使用的composer版本中,没有配置mysqli的开关,但是会自动升级mysql->mysqli如果您有 PHP 7.0.0 或更高版本。 您也可以通过添加一个 if 语句来调整此代码以强制使用 mysqli,但是您有一个自定义的 ADODB 分支。 也许做一个拉取请求。

        case 'mysql':
            // mysql driver deprecated since 5.5, removed in 7.0
            // automatically switch to mysqli
            if(version_compare(PHP_VERSION, '7.0.0', '>=')) {
                $db = 'mysqli';
            }
            $class = $db;
            break;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM