2013-06-18 17 views
0

PDO::quote似乎總是對兩個單引號打耳光,無論我通過它的值的類型或我設置的參數類型。PDO ::引用NULL,bools和更多

例如,

$x = null; 
echo $pdo->quote($x,PDO::PARAM_NULL); // '' 

因此我擴展了我自己的函數PDO類,

public function quote($value, $parameter_type=PDO::PARAM_STR) { 
    if(is_null($value)) return 'NULL'; 
    elseif(is_bool($value)) return $value ? 'TRUE' : 'FALSE'; 
    elseif(is_int($value)||is_float($value)) return $value; 
    return parent::quote($value, $parameter_type); 
} 

我錯過了任何情況下?這樣做有什麼傷害嗎?

做不同parameter types有史以來做什麼?

回答

1

根據文檔,對quote()的調用結果取決於PDO驅動程序,因爲不同的數據庫以不同的方式轉義字符串。所以一些司機可能需要在不同地方的報價。但是,真的,如果你知道你不需要引號,那麼你不應該叫quote()

至於你的功能,這取決於你想要做什麼。如果你正試圖建立一個與數據庫無關的數據訪問層,那麼你的函數將會中斷一些數據庫。這是因爲並非所有的DB都具有布爾類型,例如在SQLite中沒有像TRUE這樣的值。

但是,真的,只是使用預先準備好的語句,而不是觸及quote()就更好了。畢竟,即使是documentation for quote也是如此。

+0

然後'mysql'驅動程序被搞亂了,因爲'quote'似乎無法處理任何這些類型。我不太在意使它與數據庫無關;我已經在這裏獲得了一些MySQL特有的功能。 我確實使用了準備好的語句,但有一些情況我不能。 – mpen