php mysqli 扩展学习

7 篇文章 0 订阅

php5开始,提供了一个操作mysql数据库的新的扩展:mysqli (mysql improvement) 支持操作mysql4以上的mysql数据库。相比mysql扩展,mysqli扩展更加高效,稳定和安全。还有就是:mysql扩展是一个以及过时的扩展,官方也建议使用mysqli扩展也代替mysql扩展。mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead。下面开始正文:

1:mysqli扩展初见:

简言之:mysqli扩展,给我们提供了5个类:

MySQLi类:代表php和mysql数据库之间的一个连接。使用这个类,可以对连接进行操作。比如:连接,选择数据库,设置字符集,执行sql操作,事务操作等。

MySQLi_STMT类:代表一个prepared语句(预处理语句)。通过在sql语句中使用占位符的方式,在一定程度上防止sql注入。

mysqli_result类:代表从一个数据库查询中获取的结果集。通过这个结果集,可以获取本次操作的一些数据,比如:获取查询操作的数组结果。

* MySQLi_Driver类:MySQLi 驱动。主要获取一些客户端和驱动的信息,比如:客户端和驱动的版本号。

* MySQLi_Warning类:代表一个Mysql警告。可以获取一些错误信息。


2:mysqli扩展的安装:

windows 上较为简单:找到php.ini文件,删除 [PHP_MYSQLI]部分中的extension=php_mysqli.dll一行行首的注释符号(分号)。 

linux 上安装mysqli扩展,可以参考:http://www.cnblogs.com/xiangxiaodong/archive/2013/12/25/3490570.html

3:mysqli扩展使用:

首先,来一个传统(mysql扩展)的例子:

<?php
	$host = 'localhost';
	$user = 'root';
	$password = 'sanyue';
	$port = 3306;
	$db = 'test';
	$charset = 'utf8';

	if(!$conn = mysql_connect($host, $user, $password, $port)){
		die('An error occured when connect to mysql : '.mysql_error());
	}
	if(!mysql_set_charset($charset, $conn)){
		die('An erro occured when set charset of mysql connection : '.mysql_error());
	}
	if(!mysql_select_db($db, $conn)){
		die('An erro occured when select db of mysql connection : '.mysql_error());
	}
	
	$id = 1;
	$sql = 'select * from news_info where id = '.$id;
	$rs = mysql_query($sql, $conn);
	while($item = mysql_fetch_array($rs, MYSQL_ASSOC)){
		$data[] = $item;
	}
	
	echo '<pre>';
	print_r($data);
	echo '</pre>';

	mysql_close($conn);
?>
mysqli扩展,支持面向过程和面向对象两种方式,此处不讨论两者孰优孰劣
</pre><pre name="code" class="php"><?php
	$host = 'localhost';
	$user = 'root';
	$password = 'sanyue';
	$db = 'test';
	$charset = 'utf8';

	if(!$conn = mysqli_connect($host, $user, $password)){
		die('An error occured when connect to mysql : '.mysqli_error());
	}
	if(!mysqli_set_charset($conn, $charset)){
		die('An erro occured when set charset of mysql connection : '.mysqli_error());
	}
	if(!mysqli_select_db($conn, $db)){
		die('An erro occured when select db of mysql connection : '.mysqli_error());
	}

	$id = 1;
	$sql = 'select * from news_info where id = '.$id;
	$rs = mysqli_query($conn, $sql);
	while($item = mysqli_fetch_array($rs, MYSQLI_ASSOC)){
		$data[] = $item;
	}
	
	echo '<pre>';
	print_r($data);
	echo '</pre>';

	mysqli_close($conn);
?>
将mysql_ 替换为 mysqli_ 即可,需要注意的是:一些函数的参数顺序需要条换。以mysql_query 和 mysqli_query 为例:

mixedmysqli_query ( mysqli$link , string$query [, int$resultmode = MYSQLI_STORE_RESULT] )

resource mysql_query ( string$query [, resource$link_identifier = NULL] )

当然,上面的写法,只是简单的实现了功能,像sql预处理,使用结果集获取sql操作结果,都没有体现,下面来一段较为全面的代码:(以面向对象的方式为例)

<?php
	$host = 'localhost';
	$user = 'root';
	$password = 'sanyue';
	$db = 'test';
	$port = 3306;
	$charset = 'utf8';

	$mysqli = new mysqli($host, $user, $password, $db, $port);
	if($mysqli -> connect_errno){
		die('Failed to connect to MySQL: ('.$mysqli -> connect_errno.') '.$mysqli -> connect_error);
	}
	if(!($stmt = $mysqli -> prepare("select * from news_info where id = ?"))){
		die('Failed to prepare sql: ('.$mysqli-> errno.') '.$mysqli-> error);
	}
	$id = 1;
	if(!$stmt-> bind_param("i",$id)){
		die('Failed tp bind param: ('.$stmt->errno.') '.$stmt->error);
	}
	if(!$stmt-> execute()){
		die('Failed to execute sql: ('.$stmt->errno.') '.$stmt->error);
	}
	$rs = $stmt->get_result();
	$rs = $rs->fetch_all();
	echo '<pre>';
	print_r($rs);
	echo '</pre>';
	$stmt->close();
	$mysqli->close();
?>




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值