1

即使经过大量阅读,我也没有得到任何东西。如果我不使用 bindValue 或 bindParam,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设置为false(它在 $config 数组中设置)

使用 PHP 5.4.13 和 MySQL 5.1.67

4

1 回答 1

1

将数组传入execute()只是随后在内部执行的一系列 bindValues 的语法糖。所以,

如果我不使用 bindValue 或 bindParam,PDO 是否会转义数据?

是的,只要您将数据替换为占位符即可。

我知道它的性能优势

没有性能优势

实际逃跑在哪里/何时进行?在准备时...

  • 如果你仔细考虑一下,它不能在准备时完成。还没有数据可以“逃脱”。
  • “逃避”并不是你想的那样。“格式化”是一个更正确的术语。PDO 确实将传递的数组中的每个值格式化为字符串。
  • 格式化在仿真模式打开时在执行前完成,而在关闭时从不
于 2013-06-13T11:14:15.510 回答