2013-08-20 51 views
0

我確信我需要遷移到PDO並正在通過我的方式工作。到目前爲止,我有兩個問題...PDO取代mysqli

(1)總是適合使用預準備語句嗎?如果我只想列出表中的一組或一組記錄,並且該表上只有一個查詢,該怎麼辦?準備好的聲明是否會減慢第一個查詢的速度?

(2)假設我有一個有10個字段的表格。我可以聲明只有六個這些字段的類,然後使用PDO :: FETCH_CLASS,「foo」,其中「foo」是我的縮寫類嗎?

回答

2
  1. 我認爲這是優先考慮準備好的聲明中儘可能好的做法更好的方式替代。我在我公司的一個流量很大的項目(*)中使用了PDO,我們發現像require_once這樣的調用比PDO查詢(至少在我們的體系結構中)更成問題。

  2. 是的,但其他4個字段將可用。例如:

class Foo { 
    private $col1; 
    private $col2; 

    public static function findAll() 
    { 
     $pdo = new PDO(...); 
     $query = $pdo->prepare('SELECT * FROM foo'); 
     $query->execute(); 
     return $query->fetchAll(PDO::FETCH_CLASS, 'Foo'); 
    } 
} 

print_r(Foo::findAll()); 

讓我們假設表 '富' 具有列COL1,COL2,COL3和COL4,那麼上面的代碼將導致:

Array 
(
    [0] => Foo Object 
     (
      [col1:Foo:private] => 1 
      [col2:Foo:private] => 2 
      [col3] => 3 
      [col4] => 4 
     ) 
... 
) 
  • 只是給你一些觀點:這是一個簡單的全州在線選舉,在大衆媒體上被宣傳,持續了大約40個小時。我們的州有800萬以上的活躍選民,但少於100萬人投了票。
3

差異被認爲是微不足道的。真。沒有人報告過由準備好的陳述引起的業績問題(但是,真正使用它們的人數太少,不僅僅是告訴別人使用它們,而是無論如何)。

IF這個虛構的問題還是你的錯誤太多,PDO對你的仿真模式,當沒有真正的準備,且只能一次往返到數據庫中執行,就像沒有準備好的聲明中使用的。同樣安全。

所以 - 是的,總是使用準備好的語句。只要養成一種習慣。

我覺得這個愚蠢的語法糖FETCH_CLASS完全沒用,而且從來沒有用過它。但是,如果您要求獲得懶惰權限並使用*而不是手動列出所有六個必填字段 - 爲什麼不嘗試並看看?

在瓷磚上的說明: 雖然沒有技術上的原因,以取代mysqli的(因爲這提高 MySQL庫視爲好PDO),但是,因爲你是最有可能會使用原始在應用程序代碼的API調用,PDO實際上是對舊版本的MySQL分機

+0

我對PDO與mysqli中預處理語句的理解是,使用PDO可以對參數進行命名;而在mysqli他們不能。所以看起來PDO是全面最好的整體方法。對於所有花時間回覆的人。 –