鉴于MySQL即将被废弃,我需要将一个使用ADODB的大型网站从MySQL移到MySQLi。
现在,我已经查找了一些关于Stackoverflow的主题,感谢社区,我已经对需要做的事情有了一个大致的想法。有关这一问题的最佳议题是:
Switch large website from MySQL to MySQLi
但是,我仍然需要更多地澄清我的具体情况,在这里使用ADODB。
这就是我用来连接到DB的内容:
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时,还有什么需要考虑的吗?
发布于 2015-07-30 10:44:02
“是否还需要将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() - *发布于 2019-11-08 06:52:14
1)我建议您使用pdo_mysql而不是mysql,因为它对事务有更好的支持。
2) ADODB通过使用连接字符串( pdo_ mysql ://localhost/mydb或mysql://localhost/mydb )中的dsn标识符初始化正在使用的驱动程序(例如mysql或pdo_mysql)。
只要在连接字符串中切换mysql -> pdo_mysql,它就会开始使用mysqli -driver。
3)驱动程序加载逻辑位于adodb.inc.php的第4860行,至少在我使用的composer版本中,没有配置mysqli的开关,但如果有PHP7.0.0或更高版本,则自动升级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;https://stackoverflow.com/questions/31721471
复制相似问题