mysqli 和 PDO

用PDO访问MySQL的代码如下:

<?php

try{
	$dbh = new PDO('mysql:host=localhost;dbname=dev',"root","test");
	
	foreach($dbh->query('SELECT * FROM persons')as $row){
		print_r($row);
	}
	
	$dbh = null;
}catch(PDOException $e){
	print "Error!:" . $e->getMessage() . "<br/>";
	die();
}

?>

Notice:

新建PDO对象时的参数'mysql:host=localhost;dbname=dev'一定不能有空格,也不要打错字,第一次连接没经验找了很久的错。

然后用mysqli访问MySQL,分为面向对象和面向过程两种形式:

// mysqli object oriented way

$mysqli = new mysqli("localhost","root","test","dev");

foreach($mysqli->query("SELECT * FROM persons")as $row){
	print_r($row);
}
// mysqli procedural way
$link = mysqli_connect("localhost","root","test","dev");

foreach(mysqli_query($link,"SELECT * FROM persons")as $row){
	print_r($row);
}


输出结果略有不同,PDO输出的结果为"Array([personID] => 1 [0] => 1 [FirstName] => Peter [1] => Peter  [LastName] => Griffin [2] => Griffin [Age] => 35 [3] => 35)......"而mysqli输出的结果为"Array ( [personID] => 1 [FirstName] => Peter [LastName] => Griffin [Age] => 35 )......"。

因为PDO默认返回的结果集是关联及数字索引共有的数组形式。可以用PDOstatement-fetch(int mode)来获取结果集,通过设置不同的mode参数来获得不同的形式。

PDO通过bool PDOStatement::execute ([ array $input_parameters ] )来执行预处理语句。

如果预处理过的语句含有参数标记,必须选择下面其中一种做法:

1.调用PDOStatement::bindParam()绑定PHP变量到参数标记。

2.传递一个只作为输入参数值的数组。

具体实例详见官方文档:点击打开链接

而参数绑定又有两种不同的语法:命名参数(比如:name)和问号参数(?)。而mysqli并不支持命名参数。


在常见的SQL语句比如"SELECT * FROM users WHERE username = '$username'"';

那么就很有可能通过$_GET['username'] = "';DELETE FROM users;/*"来进行SQL注入。

PDO和mysqli都有各自的方法来对应SQL注入。

// PDO, "manual" escaping  
$username = PDO::quote($_GET['username']);  
   
$pdo->query("SELECT * FROM users WHERE username = $username");  
   
// mysqli, "manual" escaping  
$username = mysqli_real_escape_string($_GET['username']);  
   
$mysqli->query("SELECT * FROM users WHERE username = '$username'");  

Notice:

PDO::quote不仅转义了字符串,还加了单引号。

最后PDO和mysqli都有不错的性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值