2010-07-02 51 views
2

我一直在想,时间最长为什么我真的需要现场资源SQL连接才能使用mysql_real_escape_string (string $unescaped_string [, resource $link_identifier ])为什么在mysql_real_escape_string中有资源?

,这种功能不是简单地逃脱数据?连接点有什么意义?我想在没有连接的情况下使用该功能,我正在辩论创建一个没有权限的帐户,只有这样我才能做到这一点。

我调用一个包装函数runSQL(user, statement)并返回一个数组或者布尔状态的数组。

我一直在想使这个runSQL(user, statement, arguments-and-validation-data)

我只想要一个原因。我无法在手册页上找到“为什么”。

回答

5

正确的转义部分取决于当前连接的字符集,所以它需要知道有关活动连接的信息。


回复您的评论,这里的手册的链接MySQL的C API,它使用的PHP函数:

http://dev.mysql.com/doc/refman/5.1/en/mysql-real-escape-string.html

它说:

注意mysql必须是有效的开放式连接。这是必要的,因为转义取决于服务器使用的字符集。

+0

你能提供一个链接到这个文档吗? – Incognito 2010-07-02 18:58:47

4

从mysql_real_escape_string文档 - http://php.net/manual/en/function.mysql-real-escape-string.php

逃逸的 unescaped_string特殊字符,并考虑到 当前字符集的 连接,从而可以安全放置 它在一个mysql_query()

+0

这就是我一直在寻找的。谢谢。 – Incognito 2010-07-02 19:02:36

+0

奖金回合:有没有办法在没有连接的情况下做到这一点? – Incognito 2010-07-02 19:03:18

+0

不使用'mysql'扩展名,不。请考虑使用更现代的东西,比如PDO,甚至是'mysqli'。 – Charles 2010-07-02 19:36:21

0

可以一次打开多个MySQL连接。通常你会省略资源参数,因为在脚本中只使用1个MySQL连接,并且默认为最后打开的连接。