1.DSN:Data Source Name(数据源名称)。
2.通常我们使用Prepare和Execute方法查找数据库。调用PDO->prepare会返回一个PDOStatement对象,并在这个对象上调用execute,然后通过一个while循环重复调用PDOStatement->fetch方法来获取数据。
3.解决SQL查询中的错误
1)使用默认的静默模式。PDO::ERRMODE_SILENT
我们可以通过PDO->prepare返回的对象$stmt,在$stmt->execute()执行完成后,调用$code=$stmt->errorCode();方法。如果$code不会empty.则输出错误信息$stmt->errorInfo();
2)使用警告模式 PDO::ERRMODE_WARNING会产生一个PHP警告并设置errorCode属性
$dbh = new PDO($dsn,$username,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
3)使用异常模式PDO::ERRMODE_EXCEPTION会创建一个PDOException并设置errorCode属性
try
{
$dbh = new PDO($dsn,$username,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
……
}
catch(PDOException $e)
{
echo 'error:'.$e->getMessage();
echo 'file:' .$e->getFile();
……
}
PDO::ERRMODE_EXCEPTION允许将代码封装到一个try catch中,未捕获的异常将会导致脚本中断并显示堆栈跟踪找到哪里出了问题。
4.SQL注入漏洞
使用PDO::prepare会进行自动转译字符串,如果使用的是query,则我们必须要手动转译传入的数据,如:$dbh->quote($val);
5.一些辅助函数的用法
一般如果想要得到数据影响行,插入返回的ID。我们可以在执行完SQL语句即$stmt-execute()后调用相应的方法。如$stmt->rowCount()或$dbh->lastInsertId().
注:一般的方法只要用PDO::prepare产生的对象($stmt)即可,特别的是使用lastInsertId()方法需要用PDO对象($dbh)。
6.PDO的事务处理
使用PDO->beginTransaction()开始事务处理。如果一切顺利,最后使用PDO->commit()提交;如果出现问题,需要使用PDO->rollback()撤销。
7.PDO存储过程
建立存储过程不说了(假如现在创建一个getInfo()存储过程),直接看手册,调用的话:
try
{
$dbh = new PDO($dsn,$username,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$sql = 'CALL getinfo()';
$stmt = $dbh->prepare($sql);
$stmt->execute();
$string = $stmt->fetch();
}
catch(PDOException $e)
{
echo 'error'.$e->getMessage();
}
8.mysqldump备份数据库
我写了一个类,请查看附件。