PHP PDO:准备声明问题

时间:2011-01-15 09:46:14

标签: php pdo

是。所以我使用PDO lib连接并与数据库(MySQL)进行通信

所以现在它看起来像我的例子更新“bla”列:

$sql = $connect->prepaer("UPDATE users SET bla='bla' WHERE id = $USER AND age =:age");
$sql->bindValue(":age", $age);
$sql->execute();

现在,如果你能看到我已经绑定了值:仅限年龄而不是$ USER。

我在其他所有查询中都绑定了除$ USER之外的所有其他值。

$ USER是您登录的用户ID。

我想知道我是否可以保护$ USER变量,如果存在某种类型的转义字符串,就像你可以使用mysql_ *(mysql_real_escape_string)一样?。

否则我需要编辑所有查询,并添加bindValue(:user,$ USER)......

3 个答案:

答案 0 :(得分:2)

好吧,你可能可以使用任何可用的转义函数和方法,但问题是:为什么?当然,找到所有查询可能会很麻烦,但我会说,对查询进行半参数化是一件非常奇怪的事情。请添加绑定,请;)

那说,mysql_real_escape_string()有什么问题?如果您真的想要快速入侵,只需将其添加到您的字符串构建中,您就可以玩:)。

但是,再次,只是努力添加绑定。请?未来你会感谢你。

答案 1 :(得分:1)

无论如何都要改变用户以使其保持一致。这可能是额外的工作,但从长远来看它是值得的。

另外,只是你不知道 - 你可以将参数数组传递给Execute函数而不是使用bindValue()。我个人有一个包装器数据库类,所以我的更新调用如下所示:

$ db->更新(“UPDATE用户SET bla =?WHERE id =?AND age =?”,array('bla',$ USER,age));

看起来更整洁IMO。

然后在我的课程中,我只是在数组参数上调用SQL和Execute。

答案 2 :(得分:1)

PDO:quote(),但你能做的最好的事情就是绑定这个值。