2013-06-13 128 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

    谢谢:)似乎我在想着向后:) –