简介咱一起来看看PDO类。PDO是PHP Data Objects的缩写,它被描述为“在PHP中访问数据库的轻量级,兼容性的接口”。尽管它的名字不咋好听,但PDO是一个在PHP中访问数据库会让人喜爱的方式。 与html' target='_blank'>MySQLi的不同MySQLi和PDO很相似,都有两方面主要区别:1.MySQLi只能访问MySQL,但PDO可以访问12种不同的数据库2.PDO没有普通函数调用(mysqli_*functions) 开始步骤首先,你得确定一下你的PHP是否安装了PDO插件。你可以用$test=new PDO()的结果来测试。如果提示说是参数不匹配,那证明已经安装了PDO插件,如果说是对象不存在,你得先确认一下在pho.ini中php_pdo_yourssqlserverhere.extis是否被注释掉了。如果没有这句话,那你得安装PDO了,这里就不啰嗦了。连接现在我们确认服务器已经工作,开始连接数据库吧:
$dsn = 'mysql:dbname=demo;host=localhost;port=3306';$username = 'root';$password = 'password_here';try { $db = new PDO($dsn, $username, $password); // also allows an extra parameter of configuration} catch(PDOException $e) { die('Could not connect to the database: br/ ' . $e);除$dsn之外,所有语句和变量都能自我解释。DSN指的是数据源名称,有多种输入类型。最常见的一种是我们刚刚用的这种,PHP网址解释了 其他可用的DSN 。你可以省去DSN的其他额外参数,只需要在数据库驱动后面带个冒号,比如(mysql:)。在这种情况下PDO将会尝试连接到本地数据库。就像当你使用MySQLi时需要在查询中指定数据库名称一样。最后一件你需要注意的事情就是我们用try-catch块包裹了我们的初始化对象。PDO连接失败的时候将会抛出PDOException异常而不是查询失败的时候。如果你愿意你可以使用下面代码$db=line来选择异常的模式。
$input: this is's' a '''pretty dange'rous str'ing在转义后,最终得到下面结果:
$db- quote($input): 'this is/'s/' a /'/'/'pretty dange/'rous str/'ing'exec()正如上面提到的,你可以使用exec()方法实现UPDATE,DELETE和INSERT 操作,执行后它会返回受影响行数的数量:
$statement = SQL DELETE FROM `foods` WHERE `healthy` = 1;echo $db- exec($statement); // outputs number of deleted rows预处理语句尽管exec方法和查询在PHP中仍然被大量使用和支持,但是PHP网址上还是要求大家用预处理语句的方式来替代。为什么呢?主要是因为:它更安全。预处理语句不会直接在实际查询中插入参数,这就避免了许多潜在的SQL注入。然而出于某种原因,PDO实际上并没有真正的使用预处理,它是在模拟预处理方式,在将语句传给SQL服务器之前会把参数数据插入到语句中,这使得某些系统容易受到SQL注入。如果你的SQL服务器不真正的支持预处理,我们可以很容易的通过如下方式在PDO初始化时传参来修复这个问题:
$statement = $db- prepare('SELECT * FROM foods WHERE `name`= AND `healthy`= $statement2 = $db- prepare('SELECT * FROM foods WHERE `name`=:name AND `healthy`=:healthy)';正如你所见,有两种创建参数的方法,命名的与匿名的(不可以同时出现在一个语句中)。然后你可以使用bindValue来敲进你的输入: