2013-06-13 181 views
1

即使經過大量閱讀,我也沒有得到一件事。 是否PDO轉義數據如果我不使用bindValue或bindParam? 也許我不明白「準備」究竟是什麼。我知道它將一個過程存儲爲一個對象。我知道它的性能優勢(即使交易中使用它),但是逃避是我不明白PHP + PDO - 準備好的聲明信息

假設這唯一:

$db = new PDO('mysql:host=' . $config['db']['host'] . ';dbname=' . $config['db']['dbname'], $config['db']['username'], $config['db']['password'], $config['db']['options']); 

$query = $db->prepare("INSERT INTO table (col1, col2) VALUES (:col1, :col2)"); 

$result = $query->execute(array('col1' => $val_col1, 'col2' => $val_col2)); 

在哪裏/當正在做實際的逃生?雖然準備或雖然綁定帕拉姆/值? 如果我跳過此:

$query->bindParam(":col1", $val_col1); 
$query->bindParam(":col2", $val_col2); 

請注意,我有PDO :: ATTR_EMULATE_PREPARES設置爲(它在$配置陣列設置)

使用PHP 5.4.13和MySQL 5.1.67

回答

1

將數組傳遞給​​只是在內部執行的一系列bindValues的語法糖。所以,

是PDO轉義數據如果我不使用bindValue或bindParam?

是的,只要你用佔位符代替你的數據。

我知道它的性能有利於

沒有性能好處

在哪裏/當實際逃生正在做?在準備...

  • 它不能同時準備完成,如果你想好了一點。沒有數據可以「逃脫」。
  • 「逃離」不是你認爲的。 「格式化」是一個更爲正確的術語。 PDO會將所傳遞的數組中的每個值都格式化爲一個字符串。當仿真模式並且never when off
+0

當我想到性能優勢,我在想多個查詢(假設插入)使用不同的值

  • 格式被執行之前完成。 你的意思是佔位符爲「?」或「:colname」的作品呢? 我想禁用仿真力量每次都逃跑 –

  • +0

    請閱讀我上面張貼的鏈接 –

    +0

    謝謝:)似乎我在想着向後:) –