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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

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

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

今天發現php5.1.*和php5.2.*在數據庫預編譯代碼執行的時候出現差異

介紹

今天發現php5.1.*和php5.2.*在數據庫預編譯代碼執行的時候出現差異。

預編譯優點

1.使用占位符,避免逐字輸入數據到SQL中。自動處理引號和反斜線等字符的轉義——增加安全性。

2.預先“準備”一條語句,然后在每次執行時綁定不同值達到重用的目的?!S糜谝院蟊欢啻螆绦械恼Z句。

3.可讀性強。

代碼

數據庫連接代碼都一樣.

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

$username = 'monty';

$passwd = '0818';

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

以下是一些測試。注意里面的SQL和for或者foreach語句!

測試1(用key值進行綁定)

$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;

結論:

PHP 5.1.*

PHP 5.2.*

執行正常

執行正常

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

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

$params = array();

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

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;

結論:

php 5.1.*

PHP 5.2.*

執行正常

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

如果把":name"改成"?",那么兩個版本都可以順利進行。

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

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

$params = array();

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

$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;

結論:

PHP 5.1.*

PHP 5.2.*

執行到$stmt->execute()時,進程一直處于等待狀態中

執行正常:打印不出結果測試4(在limit下進行預編譯操作:page)——使用“?”機制運行

$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.*

執行正常

執行正常:打印不出結果測試5---order by)

PHP 5.1.*

PHP 5.2.*

打印出結果,但未按order by進行排序

執行正常:打印不出結果總結

PHP在使用PDO做數據庫預編譯操作的時候,盡量避免使用limit, order by, group by 做預編譯處理。綁定變量我們盡量使用統一標準,要不然都使用“?”,要不然使用“:key”。

有用的命令,我在php5.1.*進行測試,測試完了,我通過scp把文件傳輸到php5.2.*服務器上

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

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。