为什么要出新扩展呢?原因有两方面。首先MySQL的快速发展,那些依赖旧扩展的用户没法利用新特性,如prepared statements、高级连接选项以及安全提升。第二,虽然那个旧扩展当然用起来也不错,但许多人认为过程化的接口过时了,他们更喜欢面向对象的接口,因为不仅能与其他应用程序更紧密地集成,还能根据需要扩展此接口。为解决这些不足,MySQL开发人员决定是时候改造一下那个扩展,不仅仅修改了内部行为实现了性能提升,还引入了额外的特性促进了更新版本的MySQL中的可用特性的使用。

几点关键的改进:

# 面向对象:mysqli扩展被封装到一系列类,从而鼓励使用一种被很多人认为比

# prepared statements:能够阻止SQL注入攻击。它消除了那些重复执行的查询的开销和不方便。

# 事务支持:尽管

# 增强的调试功能:mysqli 扩展听过了许多方法用于调试查询,更使开发过程更高效。

# 内嵌的服务器支持:MySQL 4.0 release 引入了一个内嵌的MySQL server 库,那些感兴趣的用户就可以在客户端应用例如桌面程序中运行一个完整的MYSQL服务器了。mysqli 扩展提供了一些方法用于连接和操作这些内嵌的MySQL服务器。

# 主/从支持:从 MySQL 3.23.15 开始,MySQL 就提供了对复制的支持。使用 mysqli 扩展,你可以保证查询会被转到一个复制配置中的主服务器上。

那些对最初的MySQL扩展熟悉的用户会发现增强的mysqli扩展很眼熟,几乎是一样的命名约定。例如,数据库连接函数叫mysqli_connect而不是mysql_connect。

1、安装的先决条件

1.1、在Linux/UNIX中启用mysqli扩展

配置

1.2、在Windows上开启mysqli扩展

需修改

1.3、使用MYSQL本地驱动程序

一直以来,

要将 mysqlnd和某个扩展一起使用,你需要重新编译./configure --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd

mysqlnd 驱动也有一些限制。当前它不提供压缩以及SSL支持。

1.4、管理用户权限

当一个脚本初始化一个到MySQL服务器的连接时,权限就会被传递和检验。还有在提交需要权限检验的命令时也是一样。不过,你只需在连接时确认执行用户;除非后来搞了一个新连接,否则脚本的后续执行都将一直是那个用户。

1.5、使用样例数据

学新知识时加上一些例子就简单了。数据库:corporate;表:products

CREATE TABLE products (

id INT NOT NULL AUTO_INCREMENT,

sku VARCHAR(8) NOT NULL,

name VARCHAR(100) NOT NULL,

price DECIMAL(5,2) NOT NULL,

PRIMARY KEY(id)

)

===========================================================================

2、使用 mysqli 扩展

2.1、建立和断开连接

先要连接到服务器,然后选择一个数据库,之后是关闭连接。面向对象、过程化 这2种风格都是可以的。

用面向对象接口和MySQL服务器交互,首先要用mysqli类的构造器实例化它。

mysqli([string host [, string username [, string pswd

[, string dbname [, int port, [string socket]]]]]])

过去运用过

$mysqli = new mysqli('localhost', 'catalog_user', 'secret', 'corporate');

如果某个时刻,你想切换到其他服务器或选择另一个数据库,你可以用 connect()和select_db()方法。connect()方法的参数和mysqli类的构造函数一样。

// Instantiate the mysqli class

$mysqli = new mysqli();

// Connect to the database server and select a database

$mysqli->connect('localhost', 'root', '', 'corporate');

----------------------------------------------------------------------------------

或者

// Connect to the database server

$mysqli = new mysqli('localhost', 'catalog_user', 'secret');

// Select the database

$mysqli->select_db('corporate');

一但脚本完成执行,任何打开的数据库连接会自动关闭,资源也会被恢复。然而,也有可能一个页面在执行的过程中需要用到多个数据库连接,这些连接都需要正确地被关闭。即使只使用了一个连接,也应该在脚本的最后将其关闭,这是一种很好的实践方法。$mysqli->close()。

2.2、处理连接错误

应当仔细监控连接错误,并相应地做出应对措施。mysqli 扩展提供了一些特性,能够被用来捕捉错误消息,还有一种办法就是利用异常。例如,mysqli_connect_errno() 和 mysqli_connect_error() 就能够被用来诊断和显示MySQL连接错误信息。

2.3、获取错误消息

2.3.1、获取错误码

errno() 方法返回上一次MySQL函数执行过程中生成的错误码。0表示没有错误。

$mysqli = new mysqli('localhost', 'catalog_user', 'secret', 'corporate');

printf("Mysql error number generated: %d", $mysqli->errno);

?>

2.3.2、获取错误消息

error() 方法返回最近生成的错误消息。没有错误返回的就是空字符串。消息语言依赖于 Mysql 数据库服务器。

2.4、在一个独立文件中存储连接信息

在安全编程实践的思想中,定期修改密码是个不错的主意。还有就是有很多要访问数据库的脚本,一个个修改太麻烦了。办法是存在单独的一个文件中,必要时将其包含到你当前的文件中。

例如,可以将 mysqli 构造函数放在一个头文件中(mysql.connect.

$mysqli = new mysqli('localhost', 'catalog_user', 'secret', 'corporate');

?>

然后在其他文件中包含它:

include 'mysql.connect.

// begin database selection and queries.

?>

===================未完,待续

以上就介绍了使用

09-15 14:26