解决 The mysql extension is deprecated and will be removed in the future技术
PHP 5.5 默认是不支持 MySQL 扩展的,如果需要使用,可以使用 php5enmod mysql 打开。开启后使用 mysql_connect 的项目都会报错:[8192]mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in ... 。
PHP 核心开发组经过了很长时间的讨论,决定在 PHP5.5 版本后将 mysql_ 系列的函数标记为 deprecated,下面将给出如何解决这个问题的方法。
Why was mysql deprecated in PHP 5.5?
Johannes Schlüter, one of the PHP developers listed missing points like these:
Stored Procedures
Prepared Statements
(SSL-)Encryption
Compression
Full charset support
低级快速的解决方案:关闭 deprecated 类型的报错。特别提醒,过时报错使用 @ 符号是不能屏蔽的。
<?php error_reporting(E_ALL ^ E_DEPRECATED);
更好的解决方案:修改数据库驱动类,使用 mysqli 系列函数代替 mysql 系列函数。
例如:当前许多 PHP 代码中 MySQL 的连接语句如下:
<?php $link = mysql_connect('localhost', 'user', 'password'); mysql_select_db('dbname', $link);
<?php $link = mysqli_connect('localhost', 'user', 'password', 'dbname');
使用 mysqli 执行 SQL 的方式与 mysql 非常相似,如下示例:
<?php // Old mysql_query('CREATE TEMPORARY TABLE `lmlphp`', $link); // New mysqli_query($link, 'CREATE TEMPORARY TABLE `lmlphp`');
若在代码中使用了类似 mysql_result,mysql_fetch_array 等的函数,修改为对应的 mysqli_result,mysqli_fetch_array 即可。
除了上面的解决方案外,也可以直接使用 PDO_MySQL 来操作数据库,个人感觉这个更好用。如果项目中的数据库驱动类是面向对象风格的,修改为 mysqli 会更加容易一些,使用 mysql_pdo 的代码风格完全不一样,切换过来比较困难。有点疑惑的是,为什么PHP 一定要放弃 MySQL 的扩展,而不通过改变函数内部实现来解决问题。