執行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