国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

php - prepare與sql的開(kāi)銷(xiāo)?
我想大聲告訴你
我想大聲告訴你 2017-06-05 11:07:31
0
1
924

請(qǐng)教相同的SQL查詢(xún)語(yǔ)句用prepare與query的開(kāi)銷(xiāo)是一樣大的嗎?
$sql = $pdo -> prepare("select * from table");
$sql -> execute();
$rs = $sql -> fetch(PDO :: FETCH_ASSOC);

$sql = $pdo -> query("select * from table");
$rs = $go -> fetch(PDO :: FETCH_ASSOC);
例如上面prepare與query查詢(xún)是否效率一樣?(忽略SQL語(yǔ)句注入)。
單條查詢(xún)結(jié)果用哪一條比較好?
prepare是否在查詢(xún)時(shí)會(huì)向數(shù)據(jù)庫(kù)至少發(fā)送兩次數(shù)據(jù)庫(kù)?

關(guān)于PDO的prepare是否只適合于select?其他的update、insert into這兩個(gè)操作呢?prepare用占位符可以有效防注入,但當(dāng)?="abc./-+#$%`123"這些特殊符號(hào)(除非對(duì)其轉(zhuǎn)義)時(shí),執(zhí)行語(yǔ)句卻報(bào)錯(cuò),
exec是否更適用于update、insert into?

我想大聲告訴你
我想大聲告訴你

全部回復(fù)(1)
阿神

1.PDO::query執(zhí)行一條SQL語(yǔ)句,如果通過(guò),則返回一個(gè)PDOStatement對(duì)象。PDO::query函數(shù)有個(gè)“非常好處”,就是可以直接遍歷這個(gè)返回的記錄集。
2.PDO::exec執(zhí)行一條SQL語(yǔ)句,并返回受影響的行數(shù)。此函數(shù)不會(huì)返回結(jié)果集合。官方建議:
對(duì)于在程序中只需要發(fā)出一次的 SELECT 語(yǔ)句,可以考慮使用 PDO::query()。
對(duì)于需要發(fā)出多次的語(yǔ)句,可用 PDO::prepare() 來(lái)準(zhǔn)備一個(gè) PDOStatement 對(duì)象并用 PDOStatement::execute() 發(fā)出語(yǔ)句。
PDO::exec支持SELECT/DELETE/UPDATE/INSERT等全部SQL語(yǔ)句執(zhí)行,所以相比PDO query()函數(shù)功能要強(qiáng)大的多。由于只返回受影響的函數(shù),所以,如果執(zhí)行SELECT則無(wú)法得到PDOStatement對(duì)象,故也無(wú)法遍歷結(jié)果集,只能按照官方建議去使用query或execute函數(shù)。。
3.prepare的原理是這樣的,預(yù)先把sql語(yǔ)句發(fā)送給sql server進(jìn)行編譯,等exec的時(shí)候再真正的執(zhí)行。一次編譯,多次執(zhí)行。如果只是一次查詢(xún)的話,prepare和query效率基本相當(dāng)。如果多次執(zhí)行,prepare的效率就會(huì)提現(xiàn)出來(lái)。另外并不是所有sql注入都可以防止,where in(“ ”)這樣的就不行。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板