2.使用PDO访问数据库

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备份数据库

我写了一个类,请查看附件。


你可能感兴趣的:(PHP深度分析101个核心技巧)