手动指定mysql_real_escape_string charset所以不需要数据库连接 - 可能吗?

时间:2012-02-01 08:15:43

标签: php mysql mysql-real-escape-string

虽然我理解为什么mysql_real_escape_string需要一个活动的mysql连接来逃避各种字符串,我希望以下内容:

某种手动方式(呃,这里的术语,也许'静态'将是正确的术语)将charset推送到mysql_real_escape_string,这样就不需要有活动的数据库连接来运行mysql_real_escape_string。

因为有些人可能会问为什么我们想要没有活动连接的mysql_real_escape_string,原因很简单:

a) construct query (this is where the mysql_real_escape_string takes place)
b) create hash (md5, md4, sha1, crc32, choose your poison) from said query
c) check cache (memcached) for hash created in step b
d) query cached in memcached -> return cached results -> terminate script
c) query NOT cached in memcached -> connect to mysql -> cache result to memcached + return result

所以你可以看到上面的内容,因为在检查缓存/连接到数据库之前创建了查询的哈希值,如果需要的话......在建立数据库连接之前就会发生mysql_real_escape_string。

这样做的全部目标是,如果我们能够完全从缓存命中执行“整页请求”,则无需连接到mysqld。周期。

我们现在拥有的是一大组请求,其中只建立了一个db连接,以便mysql_real_escape_string可以执行。这种接缝没有必要。

所以,总结一下:

我们需要一种方法来安全地逃避mysql字符串(POST和GET值,因此它需要100%安全),而不需要建立数据库连接。

感谢。

2 个答案:

答案 0 :(得分:1)

我建议采用不同的方法:

function search(array $params) {
    $cacheKey = md5(serialize($params));

    ... search cache ...

}

您无需在查询上运行哈希,您只需在提供的参数上运行它即可。每次查询都应该是相同的。

答案 1 :(得分:-2)

在使用mysql_real_escape_string()之前需要MySQL连接,否则会生成级别为E_WARNING的错误,并返回FALSE。如果未定义link_identifier,则使用最后一个MySQL连接。

来自php.net文档网站。