执行没有结果集的查询
执行INSERT,UPDATE,DELETE的时候,不返回结果集。这个时候可以是有exec(),exec()将返回查询所影响的行数
int PDO::exec ( string $statement )
//PDO::exec — 执行一条 SQL 语句,并返回受影响的行数
eg:
<?php
$dbh = new PDO('odbc:sample', 'db2inst1', 'ibmdb2');
/* 删除 FRUIT 数据表中满足条件的所有行 */
$count = $dbh->exec("DELETE FROM fruit WHERE colour = 'red'");
/* 返回被删除的行数 */
print("Deleted $count rows.\n");
?>
一次执行一个查询
当执行返回结果集或者影响行数无关紧要的时候,应当使用query()
public PDOStatement PDO::query ( string $statement )
eg:
<?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()一起使用
public PDOStatement PDO::prepare ( string $statement [, array $driver_options = array() ] )
eg:
<?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()
常见示例
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
/*do something*/
}
//或者
$rows = $stmt->fetchAll();
foreach($rows as $row)
{
/*do something*/
}
思考
在实际使用过程中,为了防止sql注入,通常在sql语句中需要使用额外参数的时候,通常都使用prepare()
关于参数绑定,使用bindParam()或者使用execute()进行绑定