ADODB - 从 Mysql 切换到 Mysqli
ADODB - Switch from Mysql to Mysqli
鉴于 MySQL 即将被弃用,我需要将一个使用 ADODB 的大型网站从 MySQL 移动到 MySQLi.
现在我已经在 Whosebug 上查找了一些主题,感谢社区,我已经对需要完成的工作有了一个大致的了解。关于此事的最佳主题是那些:
ADODB mySQLi Connection
Switch large website from MySQL to 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);
对于 ADODB,从 MySQL 迁移到 MySQLi 时,还有什么我应该考虑的吗?
"do I also need to change all instances of MySQL_* functions to MySQLi_* ?"
答案是肯定的。不同MySQLAPIs/functions不要混用。您必须使用相同的 API/functions 从连接到查询。
您可以使用以下函数,只需将 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 标识符初始化正在使用的驱动程序(例如 mysql 或 pdo_mysql),即 pdo_mysql://localhost/mydb 或mysql://localhost/mydb.
只需在连接字符串中切换 mysql -> pdo_mysql,它就会开始使用 mysqli -driver。
3) 驱动程序加载逻辑位于 adodb.inc.php 的 ~4860 行,至少在我使用的 composer 版本中,没有开关可以配置 mysql i,但如果您有 PHP 7.0.0 或更高版本,它会自动升级 mysql -> mysqli。您也可以通过添加一个 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;
鉴于 MySQL 即将被弃用,我需要将一个使用 ADODB 的大型网站从 MySQL 移动到 MySQLi.
现在我已经在 Whosebug 上查找了一些主题,感谢社区,我已经对需要完成的工作有了一个大致的了解。关于此事的最佳主题是那些:
ADODB mySQLi Connection
Switch large website from MySQL to 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);
对于 ADODB,从 MySQL 迁移到 MySQLi 时,还有什么我应该考虑的吗?
"do I also need to change all instances of MySQL_* functions to MySQLi_* ?"
答案是肯定的。不同MySQLAPIs/functions不要混用。您必须使用相同的 API/functions 从连接到查询。
您可以使用以下函数,只需将 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 标识符初始化正在使用的驱动程序(例如 mysql 或 pdo_mysql),即 pdo_mysql://localhost/mydb 或mysql://localhost/mydb.
只需在连接字符串中切换 mysql -> pdo_mysql,它就会开始使用 mysqli -driver。
3) 驱动程序加载逻辑位于 adodb.inc.php 的 ~4860 行,至少在我使用的 composer 版本中,没有开关可以配置 mysql i,但如果您有 PHP 7.0.0 或更高版本,它会自动升级 mysql -> mysqli。您也可以通过添加一个 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;