日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

php获得指定位置中间的数据库,PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结...

發(fā)布時(shí)間:2025/3/20 php 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php获得指定位置中间的数据库,PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今天發(fā)現(xiàn)php5.1.*和php5.2.*在數(shù)據(jù)庫(kù)預(yù)編譯代碼執(zhí)行的時(shí)候出現(xiàn)差異

介紹

今天發(fā)現(xiàn)php5.1.*和php5.2.*在數(shù)據(jù)庫(kù)預(yù)編譯代碼執(zhí)行的時(shí)候出現(xiàn)差異。

預(yù)編譯優(yōu)點(diǎn)

1.使用占位符,避免逐字輸入數(shù)據(jù)到SQL中。自動(dòng)處理引號(hào)和反斜線等字符的轉(zhuǎn)義——增加安全性。

2.預(yù)先“準(zhǔn)備”一條語(yǔ)句,然后在每次執(zhí)行時(shí)綁定不同值達(dá)到重用的目的。——常用于以后被多次執(zhí)行的語(yǔ)句。

3.可讀性強(qiáng)。

代碼

數(shù)據(jù)庫(kù)連接代碼都一樣.

$protol = 'mysql:host=localhost;dbname=test';

$username = 'monty';

$passwd = '0818';

$dbh = new PDO($protol, $username, $passwd);

以下是一些測(cè)試。注意里面的SQL和for或者foreach語(yǔ)句!

測(cè)試1(用key值進(jìn)行綁定)

$stmt = $dbh->prepare('select * from t1 where name=:name');

$params = array();

$params['name'] = 'rentao';

foreach($params as $k=>$v){

$stmt->bindParam($k, $v);

}

$stmt->execute();

$item = array();

while($row = $stmt->fetch(PDO::FETCH_ASSOC)){

var_dump($row);

}

$stmt = null;

$dbh = null;

結(jié)論:

PHP 5.1.*

PHP 5.2.*

執(zhí)行正常

執(zhí)行正常

$params['name'] = 'rentao' 和$params[':name']='rentao'這兩個(gè)都能執(zhí)行,說(shuō)明不受“:”限制。測(cè)試2(數(shù)字下標(biāo)去綁定,但是綁定的起始參數(shù)是1)——":key"在php5.2.*上不能用數(shù)字下標(biāo)綁定

$stmt = $dbh->prepare('select * from t1 where name=:name limit 2');

$params = array();

$params[] = 'rentao';// 這里加不加":"都能成功執(zhí)行

for($i=0,$iLen = count($params); $i < $iLen; $i++){

$k = $i+1;

$stmt->bindParam($k, $params[$i]);

}

echo "HERE1\n";

$stmt->execute();

echo "HERE2\n";

$item = array();

while($row = $stmt->fetch(PDO::FETCH_ASSOC)){

var_dump($row);

}

$stmt = null;

$dbh = null;

結(jié)論:

php 5.1.*

PHP 5.2.*

執(zhí)行正常

出現(xiàn)錯(cuò)誤:“PHP Warning:? PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined”

如果把":name"改成"?",那么兩個(gè)版本都可以順利進(jìn)行。

不能同時(shí)使用兩種符號(hào)。如 select * from t2 where name=? limit :page測(cè)試3(limit綁定:page)

$stmt = $dbh->prepare('select * from t2 where name=:name limit :page');

$params = array();

$params['name'] = 'rentao';// 這里加不加":"都能成功執(zhí)行

$params['page'] = 2;

foreach($params as $k=>$v){

$stmt->bindParam($k, $v);

}

$stmt->execute();

echo "HERE1\n";

$item = array();

while($row = $stmt->fetch(PDO::FETCH_ASSOC)){

var_dump($row);

}

echo "HERE2\n";

$stmt = null;

$dbh = null;

結(jié)論:

PHP 5.1.*

PHP 5.2.*

執(zhí)行到$stmt->execute()時(shí),進(jìn)程一直處于等待狀態(tài)中

執(zhí)行正常:打印不出結(jié)果測(cè)試4(在limit下進(jìn)行預(yù)編譯操作:page)——使用“?”機(jī)制運(yùn)行

$stmt = $dbh->prepare('select * from t2 where name=? limit ?');

$params = array();

$params[] = 'rentao';

$params[] = 2;

for($i=0,$iLen = count($params); $i < $iLen; $i++){

$k = $i+1;

$stmt->bindParam($k, $params[$i]);

}

$stmt->execute();

$item = array();

while($row = $stmt->fetch(PDO::FETCH_ASSOC)){

var_dump($row);

}

$stmt = null;

$dbh = null;

PHP 5.1.*

PHP 5.2.*

執(zhí)行正常

執(zhí)行正常:打印不出結(jié)果測(cè)試5---order by)

PHP 5.1.*

PHP 5.2.*

打印出結(jié)果,但未按order by進(jìn)行排序

執(zhí)行正常:打印不出結(jié)果總結(jié)

PHP在使用PDO做數(shù)據(jù)庫(kù)預(yù)編譯操作的時(shí)候,盡量避免使用limit, order by, group by 做預(yù)編譯處理。綁定變量我們盡量使用統(tǒng)一標(biāo)準(zhǔn),要不然都使用“?”,要不然使用“:key”。

有用的命令,我在php5.1.*進(jìn)行測(cè)試,測(cè)試完了,我通過(guò)scp把文件傳輸?shù)絧hp5.2.*服務(wù)器上

scp -P9888 index.php rentao@192.168.10.4:/home/rentao

與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的php获得指定位置中间的数据库,PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。