導航:首頁 > 源碼編譯 > 預編譯pdo

預編譯pdo

發布時間:2022-08-30 23:14:34

『壹』 PDO中的預處理對象有什麼意義與作用

程序設計領域中,預處理一般是指在程序源代碼被翻譯為目標代碼的過程中,生成二進制代碼之前的過程。典型地,由預處理器(preprocessor) 對程序源代碼文本進行處理,得到的結果再由編譯器核心進一步編譯。這個過程並不對程序的源代碼進行解析,但它把源代碼分割或處理成為特定的單位——(用C/C++的術語來說是)預處理記號(preprocessing token)用來支持語言特性(如C/C++的宏調用)。

『貳』 為什麼說php必須要用PDO

根據PHP官方計劃,PHP6正式到來之時,資料庫鏈接方式統一為PDO。但是總有一小撮頑固分子,趁PHP官方還沒正式統一時,還用老式的MYSQL驅動鏈接資料庫。即使現在有部分程序改用Mysqli/pdo,只要沒用到預編譯,均和老式的Mysql驅動沒多大區別。在此,我就不點評國內的PHP生態環境了。
回歸主題,為什麼說PHP必須要用PDO?除了官方要求之外,我認為作為PHP程序員,只要你目前是做開發的話,那麼請選擇用PDO的程序/框架!PDO除了安全和萬金油式資料庫鏈接,還有一點是我目前覺得非常好用的!下面我就用我最近的切身體會來說。
業務環境:公司某老架構,資料庫設計的人員太菜了,設計過程完全沒有按照資料庫範式進行。各種表中使用大量的序列化形式保存(補充:json同理)。
出現問題:銷售的客服反饋,網站某用戶在編輯地址時,Mysql報錯了。
問題猜想:不用說了。肯定是引號,反斜杠引起序列化入庫不正常。

『叄』 為什麼 PHP 應該使用 PDO 方式訪問資料庫

很多程序員都學習過如何使用 MySQL 或 MySQLi 擴展訪問資料庫。在 PHP 5.1 中,有一個更好的方法。PHP Data Objects(PDO) 提供了很多預處理語句的方法,且使用對象將使你的工作更有成效!

PDO 介紹

「PDO – PHP Data Objects – 是一個對多種資料庫提供統一操作方法的資料庫訪問層。」

它並不具備資料庫特有的語法,但它將使切換資料庫和平台更加容易,多數情況下,只需要簡單修改鏈接字元串。

這並非一篇完整教導如何使用SQL的教程。它重要為那些現今仍在使用 mysql 或 mysqli 擴展的人,幫助他們躍至更具可移植性和強力的 PDO。


資料庫支持

此擴展可以使用 PDO 驅動編寫過的所有資料庫。在本文書寫時,下面的資料庫支持已經實現:


PDO_DBLIB ( FreeTDS / Microsoft SQL Server / Sybase )

PDO_FIREBIRD ( Firebird/Interbase 6 )

PDO_IBM ( IBM DB2 )

PDO_INFORMIX ( IBM Informix Dynamic Server )

PDO_MYSQL ( MySQL 3.x/4.x/5.x )

PDO_OCI ( Oracle Call Interface )

PDO_ODBC ( ODBC v3 (IBM DB2, unixODBC and win32 ODBC) )

PDO_PGSQL ( PostgreSQL )

PDO_SQLITE ( SQLite 3 and SQLite 2 )

PDO_4D ( 4D )

你的系統不會也不必支持所有上面的驅動;下面是一個快速檢查所支持資料庫的方法:


1 print_r(PDO::getAvailableDrivers());

連接

不同資料庫的連接方法可能稍有不同,下面是一些較為流行的資料庫連接方法。你將注意到,雖然資料庫類型不同,前三種資料庫的連接方式是相同的——而 SQLite 使用自己的語法。


Connection String

01 try {

02 # MS SQL Server andSybase with PDO_DBLIB

03 $DBH = newPDO("mssql:host=$host;dbname=$dbname, $user, $pass");

04 $DBH = newPDO("sybase:host=$host;dbname=$dbname, $user, $pass");

05

06 # MySQL with PDO_MYSQL

07 $DBH = newPDO("mysql:host=$host;dbname=$dbname", $user, $pass);

08

09 # SQLite Database

10 $DBH = newPDO("sqlite:my/database/path/database.db");

11 }

12 catch(PDOException $e) {

13 echo$e->getMessage();

14 }

注意 try/catch 塊——你應該總是使用 try/catch 包裝你的 PDO 操作,並使用異常機制——這里只是簡單的示例。通常,你只需要一個連接——有很多可以教你語法的列表。 $DBH 代表「資料庫句柄」,這將貫穿全文。


通過將句柄設置為 NULL,你可以關閉任一連接。


1 # close the connection

2 $DBH = null;

你可以在PHP.net找到更多資料庫特定選項和/或其它資料庫連接字元串的信息。


異常與 PDO

PDO 可以使用異常處理錯誤,這意味著你的所有 PDO 操作都應當包裝在一個 try/catch 塊中。你可以通過設定錯誤模式屬性強制 PDO 在新建的句柄中使用三種錯誤模式中的某一個。下面是語法:


1 $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );

2 $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );

3 $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

無論你設定哪個錯誤模式,一個錯誤的連接總會產生一個異常,因此創建連接應該總是包裝在 try/catch 塊中。


PDO::ERRMODE_SILENT

這是默認的錯誤模式。如果你使用這個模式,你將得使用同 mysql 或 mysqli 擴展一樣的方法差錯。其它兩種模式更適合 DRY 編程


PDO::ERRMODE_WARNING

此方法將會發出一個標准PHP警告,並允許程序繼續運行。這對調試很有幫助。


PDO::ERRMODE_EXCEPTION

這是多數情況下你所希望的方式。它生成異常,允許你更容易的處理錯誤,隱藏可能導致它人了解你系統的信息。下面是一個充分利用異常的示例:


01 # connect to the database

02 try {

03 $DBH = newPDO("mysql:host=$host;dbname=$dbname", $user, $pass);

04 $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

05

06 # UH-OH! Typed DELECT instead of SELECT!

07 $DBH->prepare('DELECT name FROM people');

08 }

09 catch(PDOException $e) {

10 echo"I'm sorry, Dave. I'm afraid I can't do that.";

11 file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);

12 }

在 select 語句中有一個故意留下的錯誤;這將導致一個異常。異常錯誤細節保存至一個 log 文件,並生成一段友好的(或不怎麼友好的)信息於用戶。


插入和更新

插入新數據,更新已存數據是一種非常常見的資料庫操作。使用 PDO,這通常需要兩個步驟。本節中所述的所有內容對更新和插入都有效。

這里有一個最基本的插入示例:


1 # STH means "Statement Handle"

2 $STH = $DBH->prepare("INSERT INTO folks ( first_name ) values ( 'Cathy' )");

3 $STH->execute();

你也可以使用 exec() 完成相同的操作,這將減少調用。多數情況下,你會使用調用多的方法,以充分利用語句預處理的優勢。即使你只用它一次,使用語句預處理,幫助你保護你的 SQL 免於注入攻擊。


預處理語句

使用語句預處理將幫助你免於SQL注入攻擊。


一條預處理語句是一條預編譯的 SQL 語句,它可以使用多次,每次只需將數據傳至伺服器。其額外優勢在於可以對使用佔位符的數據進行安全處理,防止SQL注入攻擊。


你通過在 SQL 語句中使用佔位符的方法使用預處理語句。下面是三個例子:一個沒有佔位符,一個使用無名佔位符,一個使用命名佔位符。


1 # no placeholders - ripe for SQL Injection!

2 $STH = $DBH->("INSERT INTO folks (name, addr, city) values ($name, $addr, $city)");

3

4 # unnamed placeholders

5 $STH = $DBH->("INSERT INTO folks (name, addr, city) values (?, ?, ?);

6

7 # named placeholders

8 $STH = $DBH->("INSERT INTO folks (name, addr, city) value (:name, :addr, :city)");

你希望避免第一種方法。選擇命名我無名佔位符將會對你對語句中數據的設置產生影響。


無名佔位符

01 # assign variables to each place holder, indexed 1-3

02 $STH->bindParam(1, $name);

03 $STH->bindParam(2, $addr);

04 $STH->bindParam(3, $city);

05

06 # insert one row

07 $name = "Daniel"

08 $addr = "1 Wicked Way";

09 $city = "Arlington Heights";

10 $STH->execute();

11

12 # insert another row with different values

13 $name = "Steve"

14 $addr = "5 Circle Drive";

15 $city = "Schaumburg";

16 $STH->execute();

這里有兩步。首先,我們對各個佔位符指定變數(2-4行)。然後,我們對各個佔位符指定數據,並執行語句。要發送另一組數據,只需改變這些變數的值並再次執行語句。


這種方法看上去對擁有很多參數的語句很笨拙吧?的確。然而,當數據保存於數組中時,這非常容易簡略:


1 # the data we want to insert

2 $data = array('Cathy', '9 Dark and Twisty Road', 'Cardiff');

3

4 $STH = $DBH->("INSERT INTO folks (name, addr, city) values (?, ?, ?);

5 $STH->execute($data);

容易吧!


數組中的數據按順序填入佔位符中。 $data[0]是第一個,$data[1]是第二個,依次。不過,要是數組中數據的次序不正確,這將不能正常運行,你需要先對數組排序。


命名佔位符

你可能已經開始猜測語法了,不過下面就是示例:


1 # the first argument is the named placeholder name - notice named

2 # placeholders always start with a colon.

3 $STH->bindParam(':name', $name);

你可以看使用快捷方式,但它需使用關聯數組。下面是示例:


1 # the data we want to insert

2 $data = array( 'name' => 'Cathy', 'addr' => '9 Dark and Twisty', 'city' => 'Cardiff' );

3

4 # the shortcut!

5 $STH = $DBH->("INSERT INTO folks (name, addr, city) value (:name, :addr, :city)");

6 $STH->execute($data);

數組中的鍵不需要以冒號開頭,但其它部分需要同佔位符匹配。如果你有一個二維數組,你只需遍歷它,並對遍歷的每個數組執行語句。


命名佔位符的另一個好的功能是直接將對象插入到你的資料庫中,只要屬性同命名欄位匹配。下面是一個示例對象,以及如何將它插入到資料庫中的示例:


01 # a simple object

02 class person {

03 public $name;

04 public $addr;

05 public $city;

06

07 function __construct($n,$a,$c) {

08 $this->name = $n;

09 $this->addr = $a;

10 $this->city = $c;

11 }

12 # etc ...

13 }

14

15 $cathy = new person('Cathy','9 Dark and Twisty','Cardiff');

16

17 # here's the fun part:

18 $STH = $DBH->("INSERT INTO folks (name, addr, city) value (:name, :addr, :city)");

19 $STH->execute((array)$cathy);

通過在執行時將對象轉換為數組,輸將將會同數組的鍵一樣對待。

『肆』 PHP PDO驅動問題,怎麼解決

最簡單的方法把這個預編譯寫法是把SQL指令預先放到SQL伺服器,命令執行的時候在動態的傳遞數據

這個寫法的一個好處是安全,防止SQL注入,因為放了一個問號,就已經表示那是數據而不是一個SQL可執行的語句

第二個好處是可以一次編譯多次執行,在執行多個相似操作的時候,會加快SQL的速度,降低SQL伺服器的負擔就這樣試試吧,如果你對php有興趣的話,可以向我一樣在後盾人平台多看看自己學習學習,時間長了自己就慢慢明白了,希望能幫到你,給個採納吧謝謝o(〒㉨〒)o

『伍』 php防sql注入的代碼

一、 注入式攻擊的類型
可能存在許多不同類型的攻擊動機,但是乍看上去,似乎存在更多的類型。這是非常真實的-如果惡意用戶發現了一個能夠執行多個查詢的辦法的話。本文後面,我們會對此作詳細討論。

果你的腳本正在執行一個SELECT指令,那麼,攻擊者可以強迫顯示一個表格中的每一行記錄-通過把一個例如"1=1"這樣的條件注入到WHERE子句中,如下所示(其中,注入部分以粗體顯示):
SELECT * FROM wines WHERE variety = 』lagrein』 OR 1=1;』

正如我們在前面所討論的,這本身可能是很有用的信息,因為它揭示了該表格的一般結構(這是一條普通的記錄所不能實現的),以及潛在地顯示包含機密信息的記錄。
一條更新指令潛在地具有更直接的威脅。通過把其它屬性放到SET子句中,一名攻擊者可以修改當前被更新的記錄中的任何欄位,例如下面的例子(其中,注入部分以粗體顯示):
UPDATE wines SET type=』red』,』vintage』=』9999』 WHERE variety = 』lagrein』

通過把一個例如1=1這樣的恆真條件添加到一條更新指令的WHERE子句中,這種修改范圍可以擴展到每一條記錄,例如下面的例子(其中,注入部分以粗體顯示):
UPDATE wines SET type=』red』,』vintage』=』9999 WHERE variety = 』lagrein』 OR 1=1;』

最危險的指令可能是DELETE-這是不難想像的。其注入技術與我們已經看到的相同-通過修改WHERE子句來擴展受影響的記錄的范圍,例如下面的例子(其中,注入部分以粗體顯示):
DELETE FROM wines WHERE variety = 』lagrein』 OR 1=1;』

二、 多個查詢注入
多個查詢注入將會加劇一個攻擊者可能引起的潛在的損壞-通過允許多條破壞性指令包括在一個查詢中。在使用MySQL資料庫時, 攻擊者通過把一個出乎意料之外的終止符插入到查詢中即可很容易實現這一點-此時一個注入的引號(單引號或雙引號)標記期望變數的結尾;然後使用一個分號終 止該指令。現在,一個另外的攻擊指令可能被添加到現在終止的原始指令的結尾。最終的破壞性查詢可能看起來如下所示:
SELECT * FROM wines WHERE variety = 』lagrein』;
GRANT ALL ON *.* TO 』BadGuy@%』 IDENTIFIED BY 』gotcha』;』

這個注入將創建一個新的用戶BadGuy並賦予其網路特權(在所有的表格上具有所有的特權);其中,還有一個"不祥"的口令被加入到這個簡單的SELECT語句中。如果你遵循我們在以前文章中的建議-嚴格限制該過程用戶的特權,那麼,這應該無法工作,因為web伺服器守護程序不再擁有你撤回的GRANT特權。但是從理論上講,這樣的一個攻擊可能給予BadGuy自由權力來實現他對你的資料庫的任何操作。
至 於這樣的一個多查詢是否會被MySQL伺服器處理,結論並不唯一。這其中的一些原因可能是由於不同版本的MySQL所致,但是大多數情況卻是由於多查詢存 在的方式所致。MySQL的監視程序完全允許這樣的一個查詢。常用的MySQL GUI-phpMyAdmin,在最終查詢之前會復制出以前所有的內容,並且僅僅這樣做。
但是,大多數的在一個注入上下文中的多查詢都是由PHP的mysql 擴展負責管理的。幸好,默認情況下,它是不允許在一個查詢中執行多個指令的;試圖執行兩個指令(例如上面所示的注入)將會簡單地導致失敗-不設置任何錯 誤,並且沒有生成任何輸出信息。在這種情況下,盡管PHP也只是"規規矩矩"地實現其預設行為,但是確實能夠保護你免於大多數簡單的注入式攻擊。
PHP5中的新的mysqli擴展(參考http://php.net/mysqli),就象mysql一樣,內在地也不支持多個查詢,不過卻提供了一個mysqli_multi_query()函數以支持你實現多查詢-如果你確實想這樣做的話。
然而,對於SQLite-與PHP5綁定到一起的可嵌入的SQL資料庫引擎(參考http://sqlite.org/和http://php.net/sqlite) 情況更為可怕,由於其易於使用而吸引了大量用戶的關注。在有些情況下,SQLite預設地允許這樣的多指令查詢,因為該資料庫可以優化批查詢,特別是非常 有效的批INSERT語句處理。然而,如果查詢的結果為你的腳本所使用的話(例如在使用一個SELECT語句檢索記錄的情況下), sqlite_query()函數卻不會允許執行多個查詢。三、 INVISION Power BOARD SQL注入脆弱性
Invision Power Board是一個著名的論壇系統。2005年五月6號,在登錄代碼中發現了一處SQL注入脆弱性。其發現
者為GulfTech Security Research的James Bercegay。
這個登錄查詢如下所示:
$DB->query("SELECT * FROM ibf_members WHERE id=$mid AND password=』$pid』");

其中,成員ID變數$mid和口令ID變數$pid被使用下面兩行代碼從my_cookie()函數中檢索出:
$mid = intval($std->my_getcookie(』member_id』));
$pid = $std->my_getcookie(』pass_hash』);

在此,my_cookie()函數使用下列語句從cookie中檢索要求的變數:
return urldecode($_COOKIE[$ibforums->vars[』cookie_id』].$name]);

【注意】從該cookie返回的值根本沒有被處理。盡管$mid在使用於查詢之前被強制轉換成一個整數,但是$pid卻保持不變。因此,它很容易遭受我們前面所討論的注入類型的攻擊。
因此,通過以如下方式修改my_cookie()函數,這種脆弱性就會暴露出來:
if ( ! in_array( $name,array(』topicsread』, 』forum_read』,』collapseprefs』) ) )
{
return $this->
clean_value(urldecode($_COOKIE[$ibforums->vars[』cookie_id』].$name]));
else
{
return urldecode($_COOKIE[$ibforums->vars[』cookie_id』].$name]);
}

經過這樣的改正之後,其中的關鍵變數在"通過"全局clean_value()函數後被返回,而其它變數卻未進行檢查。
現 在,既然我們大致了解了什麼是SQL注入,它的注入原理以及這種注入的脆弱程度,那麼接下來,讓我們探討如何有效地預防它。幸好,PHP為我們提供了豐富 的資源,因此我們有充分的信心預言,一個經仔細地徹底地使用我們所推薦的技術構建的應用程序將會從你的腳本中根本上消除任何可能性的SQL注入-通過在它 可能造成任何損壞之前"清理"你的用戶的數據來實現。
四、 界定你的查詢中的每一個值
我們推薦,你確保界定了你的查詢中的每一個值。字元串值首當其沖,以及那些你通常期望應該使用"單"(而不是"雙")引號的內容。一方面,如果你使用雙引 號來允許PHP在字元串內的變數替代,這樣可以使得輸入查詢更為容易些;另一方面,這(無可否認,只是極少量地)也會減少以後PHP代碼的分析工作。
下面,讓我們使用我們一開始使用的那個非注入式查詢來說明這個問題:
SELECT * FROM wines WHERE variety = 』lagrein』

或以PHP語句表達為:
$query = "SELECT * FROM wines WHERE variety = 』$variety』";

從技術上講,引號對於數字值來說是不需要使用的。但是,如果你並不介意用引號把例如葡萄酒這樣的一個域相應的一個值括起來並且如果你的用戶把一個空值輸入到你的表單中的話,那麼,你會看到一個類似下面的查詢:
SELECT * FROM wines WHERE vintage =

當然,這個查詢從語法上講是無效的;但是,下面的語法卻是有效的:
SELECT * FROM wines WHERE vintage = 』』

第二個查詢將(大概)不會返回任何果,但是至少它不會返回一個錯誤消息。
五、 檢查用戶提交的值的類型
從前面的討論中我們看到,迄今為止,SQL注入的主要來源往往出在一個意料之外的表單入口上。然而,當你經由一個表單向用戶提供機會提交某些值時,你應該有相當的優勢來確
定 你想取得什麼樣的輸入內容-這可以使得我們比較容易地檢查用戶入口的有效性。在以前的文章中,我們已經討論過這樣的校驗問題;所以,在此,我們僅簡單地總 結當時我們討論的要點。如果你正在期望一個數字,那麼你可以使用下面這些技術之一來確保你得到的真正是一個數字類型:
�6�1 使用is_int()函數(或is_integer()或is_long())。
�6�1 使用gettype()函數。
�6�1 使用intval()函數。
�6�1 使用settype()函數。
為 了檢查用戶輸入內容的長度,你可以使用strlen()函數。為了檢查一個期望的時間或日期是否有效,你可以使用strtotime()函數。它幾乎一定 能夠確保一位用戶的入口中沒有包含分號字元(除非標點符號可以被合法地包括在內)。你可以藉助於strpos()函數容易地實現這一點,如下所示:if( strpos( $variety, 』;』 ) ) exit ( "$variety is an invalid value for variety!" );

正如我們在前面所提到的,只要你仔細分析你的用戶輸入期望,那麼,你應該能夠很容易地檢查出其中存在的許多問題。
六、 從你的查詢中濾去每一個可疑字元
盡管在以前的文章中,我們已經討論過如何過濾掉危險字元的問題;但是在此,還是讓我們再次簡單地強調並歸納一下這個問題:
�6�1 不要使用magic_quotes_gpc指令或它的"幕後搭擋"-addslashes()函數,此函數在應用程序開發中是被限制使用的,並且此函數還要求使用額外的步驟-使用stripslashes()函數。
�6�1 相比之下,mysql_real_escape_string()函數更為常用,但是也有它自己的缺點。

『陸』 php中防止SQL注入的最好方法是什麼

使用預備義語句和參數化查詢。對於帶有任何參數的sql語句都會被發送到資料庫伺服器,並被解析!對於攻擊者想要惡意注入sql是不可能的! 實現這一目標基本上有兩種選擇: 1.使用PDO(PHP Data Objects ):$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name'); $stmt->execute(array(':name' => $name)); foreach ($stmt as $row) { // do something with $row }2.使用mysqli:$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?'); $stmt->bind_param('s', $name); $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { // do something with $row }PDO(PHP數據對象) 注意當使用PDO訪問MySQL資料庫真正的預備義語句並不是默認使用的!為了解決這個問題,你必須禁用模擬准備好的語句。使用PDO創建連接的例子如下: $dbConnection = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'pass'); $dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);在上面例子中錯誤模式ERRMODE不是嚴格必須的,但是建議添加它。當運行出錯產生致命錯誤時,這種方法腳本不會停止。並給開發人員捕捉任何錯誤的機會(當拋出PDOException異常時)。 setAttribute()那一行是強制性的,它告訴PDO禁用模擬預備義語句,使用真正的預備義語句。這可以確保語句和值在發送給MySQL資料庫伺服器前不被PHP解析(攻擊者沒有機會注入惡意的SQL). 當然你可以在構造函數選項中設置字元集參數,特別注意'老'的PHP版本(5.3.6)會在DSN中忽略掉字元集參數。 這里最重要的是,該參數值是和預編譯的語句結合的,而不是和一個SQL字元串.SQL注入的工作原理是通過欺騙手段創建的SQL腳本包括惡意字元串發送到資料庫.因此,通過發送實際的分開的sql參數,你會降低風險.使用准備好的語句時,你發送的任何參數,將只被視為字元串(雖然資料庫引擎可能會做一些參數的優化,當然最終可能會為數字).在上面的例子中,如果變數$name包含'sarah';DELETE * FROM employees,結果只會是一個搜索的字元串"'sarah';DELETE * FROM employees",你不會得到一個空表。 使用准備好的語句的另一個好處是,如果你在同一會話中多次執行相同的語句,這將只被解析和編譯一次,給你一些的速度增長。

『柒』 PDO預處理與綁定參數預處理意思一樣么

這里沒有一樣或者不一樣的說法,PDO的預處理語句就是把你想要運行的sql語句編譯成一種模板,然後可以綁定參數去處理。

它的好處是,sql語句只解析一次,可以對參數綁定一次或者多次執行,提高了性能,節約了帶寬的傳輸。
另外可以防止sql注入,是安全的做法

『捌』 php在5.1.*和5.2.*之間pdo資料庫操作中的不同

資料庫連接代碼都一樣.


?


$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_mp($row);


}


$stmt = null;


$dbh = null;

總結


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



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


?


scp -P9888 index.php [email protected]:/home/rentao

閱讀全文

與預編譯pdo相關的資料

熱點內容
解除電腦加密文件夾 瀏覽:358
androidcheckbox組 瀏覽:546
linux在線安裝軟體 瀏覽:823
如何設置手機安卓版 瀏覽:285
簡歷pdfword 瀏覽:123
鋒雲視頻伺服器網關設置 瀏覽:162
linux伺服器如何查看網卡型號 瀏覽:142
加密相冊誤刪了怎麼恢復 瀏覽:380
安卓代練通怎麼下載 瀏覽:518
知道域名如何查詢伺服器 瀏覽:906
方舟手游怎麼才能進伺服器 瀏覽:289
抖音演算法自動爆音 瀏覽:24
linux修改網卡配置 瀏覽:913
雲伺服器和本地伺服器數據 瀏覽:843
在家如何創業python 瀏覽:225
編譯原理好課 瀏覽:717
python中實數的表示 瀏覽:372
php下載中文名文件 瀏覽:351
哪裡有專門注冊app實名的 瀏覽:274
魔爪mx穩定器app去哪裡下載 瀏覽:469