2010-02-25 41 views
4

我是PDO的新手,不得不说我目前为止喜欢它,但在使用它的某些调用方面我仍然有些不稳定,并且文档也不完整。关于PDO和bindparam的澄清

我正在使用一对存储过程,并且从我对PDO的理解中,我被迫为此使用了准备。我构建了一个模块,可以存储有关用户造成的任何错误的信息。我知道bindParam会在任何引号转义并清除字符串之前将其插入到数据库中,这不是我想要的。我想查看字符串,因为用户输入该字符串以进行故障排除。我曾尝试放弃bindparam调用,但是尝试通过引用传递错误。有没有一种方法可以实现这一目标?也开放给建议。谢谢。

回答

6

bindParam不会“逃脱”或“清洁”任何东西。它直接将您提供的字符串直接发送到数据库层。包含在字符串中的任何'字符将最终以数据库中列中的'字符结尾。这就是参数化的要点:没有“特殊字符”需要担心。

如果您在通过未提及bindParam时遇到问题,我建议您改用bindValue。实际上,我几乎建议始终使用该呼叫,因为bindParam(和mysqli_stmt_bind_param)的参照行为很混乱,几乎总是不需要的。

+0

谢谢!我将使用bindValue来代替。我有点困惑......我有一种强烈的印象,当我从mysql_函数切换到PDO时,我不再需要mysql_real_escape_string。请告诉我,不管怎样,PDO正在为我处理这个问题,因为我已经阅读了至少其他六个地方。 – jim 2010-02-25 02:19:17

+0

@jim:如果一个答案解决了你的问题,请确保点击旁边的复选标记,以便发布者获得积分:) – Matchu 2010-02-25 02:39:53

+4

是的,你不需要带有PDO的'mysql_real_escape_string'。字符串值直接进入数据库层,而不必将其粗略拼接到SQL语句中。因为它不是在SQL字符串文字中构造的,所以不需要转义任何东西。 – bobince 2010-02-25 09:44:37