ADODB - 从Mysql切换到Mysqli

时间:2015-07-30 10:36:23

标签: php mysql mysqli migration adodb

鉴于MySQL很快就会被弃用,我需要使用ADODB从MySQL迁移到MySQLi。

现在我已经在Stackoverflow上查了几个主题,感谢社区,我已经知道需要做些什么。关于此事的最佳主题是那些:

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);

从MySQL迁移到MySQL的ADODB时还有什么需要考虑的吗?

2 个答案:

答案 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;