一:为什么选择PDO
PDO提供了一个数据访问抽象层,意味着无论使用哪种数据库都可以用同样的函数进行查询获取数据
提高了运行效率(这个暂时没有什么深入了解)
二:查看是否支持PDO(phpinfo())
三:以Mysql来做实例
可以在http://php.net/manual/zh/book.pdo.php中查看对应的方法
首先创建一个数据库连接的PDO实例
PDO::__construct ( string $dsn
[, string $username
[, string $password
[, array $driver_options
]]] ) 可以放在try catch中
dsn一个DSN的PDO驱动名、紧随其后的冒号、以及具体PDO驱动链接语法组成
username 用户名
password用户密码
driver_options一个具体驱动的连接选项的键=>值数组
$pdo = new PDO('mysql:dbname=mytest;host=localhost','root','');
执行简单的查询:对于不返回结果的查询(insert update delete)使用exec()方法,它使用需要执行的语句作为参数
$name = "name2";
$sex = 'man';
$insert = sprintf("INSERT INTO mytest(name,sex) VALUES('%s','%s');",$name,$sex); //可以防止SQL注入
$pdo->exec($insert);
$id = $pdo->lastInsertId(); //查看插入操作动态生成的主键值
为了防止SQL注入,可以将字符串放入到PDO的quote()方法
$data = $pdo->quote($unsafe_data);
$pdo->exec("insert into tableN(colum) values($data)";
对于返回值的select操作使用query操作 $result = $pdo->query($insertQ); 查看返回记录个数使用$result->rowCount()
$select = $pdo->query('select name,sex from mytest');var_dump($select);
$select->setFetchMode(PDO::FETCH_NUM); //
while($row = $select->fetch()){
print $row[0] . "\t" . $row[1] ;
}
四:也可以使用prepare预定义语句,同时因为这个方式查询语句和数据分开传送就不需要防范SQl注入攻击
$selectQuery = 'SELECT name, sex FROM mytest WHERE name = :name AND sex = :sex';
$sth = $pdo->prepare($selectQuery);
$sth->execute(array(':name' => 'name12', ':sex' => 'man'));
$users = $sth->fetchAll();