鉴于MySQL很快就会被弃用,我需要使用ADODB从MySQL迁移到MySQLi。
现在我已经在Stackoverflow上查了几个主题,感谢社区,我已经知道需要做些什么。关于此事的最佳主题是那些:
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);
从MySQL迁移到MySQL的ADODB时还有什么需要考虑的吗?
答案 0 :(得分:2)
“我是否还需要将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 :(得分:1)
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;