执行INSERT,UPDATE,DELETE的时候,不返回结果集。这个时候能够是有exec(),exec()将返回查询所影响的行数php
int PDO::exec ( string $statement ) //PDO::exec — 执行一条 SQL 语句,并返回受影响的行数
eg:sql
<?php $dbh = new PDO('odbc:sample', 'db2inst1', 'ibmdb2'); /* 删除 FRUIT 数据表中知足条件的全部行 */ $count = $dbh->exec("DELETE FROM fruit WHERE colour = 'red'"); /* 返回被删除的行数 */ print("Deleted $count rows.\n"); ?>
当执行返回结果集或者影响行数可有可无的时候,应当使用query()fetch
public PDOStatement PDO::query ( string $statement )
eg:ui
<?php function getFruit($conn) { $sql = 'SELECT name, color, calories FROM fruit ORDER BY name'; foreach ($conn->query($sql) as $row) { print $row['name'] . "\t"; print $row['color'] . "\t"; print $row['calories'] . "\n"; } } ?>
使用while和query()进行组合何尝不可的,可是使用prepare()的效率会更高一点,prepare()一般与execute()一块儿使用code
public PDOStatement PDO::prepare ( string $statement [, array $driver_options = array() ] )
eg:get
<?php /* Execute a prepared statement by passing an array of values */ $sql = 'SELECT name, colour, calories FROM fruit WHERE calories < :calories AND colour = :colour'; $sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); $sth->execute(array(':calories' => 150, ':colour' => 'red')); $red = $sth->fetchAll(); $sth->execute(array(':calories' => 175, ':colour' => 'yellow')); $yellow = $sth->fetchAll(); ?>
执行查询结束以后,关于结果的获取,又是一个不得不考虑的问题。
一般使用fetch(),fetchAll()和fetchColumn()
常见示例string
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { /*do something*/ } //或者 $rows = $stmt->fetchAll(); foreach($rows as $row) { /*do something*/ }
在实际使用过程当中,为了防止sql注入,一般在sql语句中须要使用额外参数的时候,一般都使用prepare()
关于参数绑定,使用bindParam()或者使用execute()进行绑定it