新聞中心

創(chuàng)新互聯(lián)主要從事網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)堯都,十余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
1) exec() 方法
當(dāng)執(zhí)行 INSERT、UPDATE 和 DELETE 等不需要返回結(jié)果集的 SQL 語句時(shí),可以使用 PDO 對(duì)象中的 exec() 方法。該方法成功執(zhí)行后,將返回受影響的行數(shù),語法格式如下:
PDO::exec(string $sql)
其中 $sql 為要執(zhí)行的 SQL 語句。
注意:exec() 方法不會(huì)從 SELECT 查詢語句中獲取相應(yīng)的結(jié)果。
【示例】使用 exec() 方法向數(shù)據(jù)庫中添加一條數(shù)據(jù)。
exec($sql);
if($res) echo '成功添加 '.$res.' 條數(shù)據(jù)!';
}catch(PDOException $e){
echo '數(shù)據(jù)庫連接失敗:'.$e -> getMessage();
}
?>
運(yùn)行結(jié)果如下:
成功添加 1 條數(shù)據(jù)!
2) query() 方法
當(dāng)執(zhí)行需要返回結(jié)果集的 SELECT 查詢語句時(shí),可以使用 PDO 對(duì)象中的 query() 方法。如果該方法執(zhí)行成功,則會(huì)返回一個(gè) PDOStatement 對(duì)象。如果使用了query() 方法,并想了解獲取的數(shù)據(jù)行總數(shù),可以使用 PDOStatement 對(duì)象中的 rowCount() 方法獲取。
query() 方法的語法格式如下:
PDO::query(string $sql)
PDO::query(string $sql, int $PDO::FETCH_COLUMN, int $colno)
PDO::query(string $sql, int $PDO::FETCH_CLASS, string $classname, array $ctorargs)
PDO::query(string $sql, int $PDO::FETCH_INTO, object $object)
其中 $sql 為要執(zhí)行的 SQL 語句;其余的參數(shù)用來為語句設(shè)置默認(rèn)的獲取模式,相當(dāng)于調(diào)用結(jié)果對(duì)象 PDOStatement::setFetchMode() 方法。
【示例】使用 query() 方法查詢前面我們添加的那條數(shù)據(jù)。
query($sql,PDO::FETCH_ASSOC);
print_r($res);
}catch(PDOException $e){
echo '數(shù)據(jù)庫連接失?。?.$e -> getMessage();
}
?>
運(yùn)行結(jié)果如下:
PDOStatement Object ( [queryString] => SELECT * FROM user WHERE name='小剛' )
使用 query() 和 exec() 方法有以下幾點(diǎn)需要注意:
- query() 和 exec() 都可以執(zhí)行所有的 SQL 語句,只是返回值不同而已;
- query() 可以實(shí)現(xiàn)所有 exec() 的功能;
- 當(dāng)把 select 語句應(yīng)用到 exec() 時(shí),總是返回 0;
- 如果要看查詢的具體結(jié)果,可以通過 foreach 語句完成循環(huán)輸出。
3) prepare() 和 execute() 方法
當(dāng)同一個(gè)查詢需要多次執(zhí)行時(shí)(有時(shí)需要迭代傳入不同的參數(shù)),使用預(yù)處理語句的方式來實(shí)現(xiàn)效率會(huì)更高。使用預(yù)處理語句就需要使用 PDO 對(duì)象中的 prepare() 方法去準(zhǔn)備一個(gè)將要執(zhí)行的查詢,再使用 PDOStatement 對(duì)象中的 execute() 方法來執(zhí)行。
prepare() 方法的語法格式如下:
PDO::prepare(string $statement[, array $driver_options = array()])
參數(shù)說明如下:
- $statement:必須是對(duì)目標(biāo)數(shù)據(jù)庫有效的 SQL 語句模板;
- $driver_options:為可選參數(shù)(數(shù)組類型),包含一個(gè)或多個(gè)鍵值對(duì),為返回的 PDOStatement 對(duì)象設(shè)置屬性。最常使用到是將 PDO::ATTR_CURSOR 值設(shè)置為 PDO::CURSOR_SCROLL 來請(qǐng)求一個(gè)可滾動(dòng)游標(biāo)。
SQL 語句模板中可以包含零個(gè)或多個(gè)參數(shù)占位標(biāo)記,格式可以是命名(:name)或問號(hào)(?)的形式,當(dāng)它執(zhí)行時(shí)將用真實(shí)數(shù)據(jù)取代。在同一個(gè) SQL 語句里,命名和問號(hào)形式不能同時(shí)使用,只能選擇其中一種參數(shù)形式。如果使用命名形式的占位標(biāo)記,那么標(biāo)記的命名必須是唯一的。
execute() 方法的語法格式如下:
PDOStatement::execute([array $input_parameters])
參數(shù) $input_parameters 為一個(gè)元素個(gè)數(shù)和將被執(zhí)行的 SQL 語句中綁定的參數(shù)一樣多的數(shù)組。綁定的值不能超過指定的個(gè)數(shù),如果在 $input_parameters 中存在比 PDO::prepare() 預(yù)處理的 SQL 指定的多的鍵名,則此語句將會(huì)失敗并發(fā)出一個(gè)錯(cuò)誤。
【示例】使用命名形式的參數(shù)占位符,查詢指定的 SQL 語句。
prepare($sql);
$sth -> execute([':age'=>11]);
$res1 = $sth -> fetchAll();
$sth -> execute(array(':age'=>14));
$res2 = $sth -> fetchAll();
echo '';
print_r($res1);
print_r($res2);
}catch(PDOException $e){
echo '數(shù)據(jù)庫連接失敗:'.$e -> getMessage();
}
?>
運(yùn)行結(jié)果如下:
Array
(
[0] => Array
(
[name] => 李四
[0] => 李四
[age] => 11
[1] => 11
[sex] => 男
[2] => 男
)
[1] => Array
(
[name] => 小紅
[0] => 小紅
[age] => 11
[1] => 11
[sex] => 女
[2] => 女
)
)
Array
(
[0] => Array
(
[name] => 小剛
[0] => 小剛
[age] => 14
[1] => 14
[sex] => 男
[2] => 男
)
)
【示例】使用問號(hào)形式的參數(shù)占位符,查詢指定的 SQL 語句。
prepare($sql);
$sth -> execute([12,'男']);
$res1 = $sth -> fetchAll();
$sth -> execute(array(11,'女'));
$res2 = $sth -> fetchAll();
echo '';
print_r($res1);
print_r($res2);
}catch(PDOException $e){
echo '數(shù)據(jù)庫連接失?。?.$e -> getMessage();
}
?>
運(yùn)行結(jié)果如下:
Array
(
[0] => Array
(
[name] => 張三
[0] => 張三
[age] => 12
[1] => 12
[sex] => 男
[2] => 男
)
[1] => Array
(
[name] => 王五
[0] => 王五
[age] => 12
[1] => 12
[sex] => 男
[2] => 男
)
)
Array
(
[0] => Array
(
[name] => 小紅
[0] => 小紅
[age] => 11
[1] => 11
[sex] => 女
[2] => 女
)
)
當(dāng)前題目:PHP使用PDO執(zhí)行SQL語句
文章分享:http://www.dlmjj.cn/article/djegceg.html


咨詢
建站咨詢
