虽然我理解为什么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%安全),而不需要建立数据库连接。
感谢。
答案 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文档网站。