在PHP腳本中,通過PDO執行SQL查詢與數據庫進行交互,可以分為三種不同的策略,使用哪一種方法取決於你要做什么操作。
1、使用PDO::exec()方法
當執行INSERT、UPDATE和DELETE等沒有結果集的查詢時,使用PDO對象中的exec()方法去執行。該方法成功執行后,將返回受影響的行數。注意,該方法不能用於SELECT查詢。示例如下所示:
<?php try { $pdo = new PDO ('mysql:host=localhost;dbname=testdb','root','123'); $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $pdo->exec('set names "utf8"'); } catch (PDOException $e) { exit("數據庫連接失敗: ".$e -> getMessage()); } $sql = "UPDATE contactInfo SET phone='15801680168' where name='高某某'"; //使用exec()方法可以執行INSERT、UPDATE、DELETE等 $affected = $pdo->exec($sql); if ($affected) { echo "數據表中受影響的行數為: ".$affected; } else { print_r($pdo->errorInfo()); } ?>
2、使用PDO::query()方法
當執行返回結果集的SELECT查詢時,或者所影響的行數無關緊要時,應當使用PDO對象中的query()方法。如果該方法成功執行指定的查詢,則返回一個PDOStatement對象。如果使用了query()方法,並想了解獲取的數據行總數,可以使用PDOStatement對象中的rowCount()方法獲取。示例代碼如下所示:
<?php try { $pdo = new PDO ('mysql:host=localhost;dbname=testdb','root','123'); $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $pdo->exec('set names "utf8"'); } catch (PDOException $e) { exit("數據庫連接失敗: ".$e -> getMessage()); } $sql = "SELECT name, phone, email FROM contactInfo WHERE departmentId='D01'"; try { //執行SELECT查詢,並返回PDOstatement對象 $pdostatement = $pdo->query("$sql"); echo "一共從表中獲取到".$pdostatement->rowCount()."條記錄:n"; //利用循環輸出 foreach ($pdostatement as $row) { echo $row['name'] . "t"; //輸出從表中獲取到的聯系人的名字 echo $row['phone'] . "t"; //輸出從表中獲取到的聯系人的電話 echo $row['email'] . "n"; //輸出從表中獲取到的聯系人的電子郵件 } } catch (PDOException $e) { echo $e->getMessage(); } ?>
3、使用PDO::prepare()和PDOStatement::execute()兩個方法
當同一個查詢需要多次執行時(有時需要迭代傳入不同的列值),使用預處理語句的方式來實現效率會更高。使用預處理語句就需要使用PDO對象中的prepare()方法去准備一個將要執行的查詢,再使用PDOStatement對象中的execute()方法來執行。