php – 是否每次调用mysql_real_escape_string都需要另一次访问数据库?

http://php.net/manual/en/function.mysql-real-escape-string.php

MysqL_real_escape_string() calls MysqL’s library function
MysqL_real_escape_string, which prepends backslashes to the following
characters: \x00, \n, \r, \, ‘, ” and \x1a.

好吧,基本上如果我做过这样的事情:

MysqL_query(“insert T(C)select’”.MysqL_real_escape_string($value).“’”)

我正在为MysqL_real_escape_string函数进行一次数据库访问,另一次函数MysqL_query = 2次访问数据库

解决方法:

它使用MysqL库的事实并不意味着它与服务器进行往返.

它运行来自MysqL客户端库的代码,加载到与PHP解释器相同的进程中.您确实需要连接 – 该功能需要知道某些服务器设置才能正常运行.但这些设置缓存在PHP端的连接信息中.

如果你想验证这个(并且你在Linux上),写一个简单的脚本,如:

<?PHP
$link = MysqL_connect('localhost', 'user', 'pass');
echo "Connection done\n";
echo MysqL_real_escape_string("this ' is a test");
?>

并通过strace运行:

$strace PHP t.PHP
....            # here comes the connection to MysqL, socket fd == 3
connect(3, {sa_family=AF_FILE, path="/var/run/MysqLd/MysqLd.sock"}, 110) = 0
fcntl(3, F_SETFL, O_RDWR)               = 0
setsockopt(3, SOL_SOCKET, SO_RCVTIMEO, "\2003\341\1\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 0
....            # talking with MysqL here
poll([{fd=3, events=POLLIN}], 1, 60000) = 1 ([{fd=3, revents=POLLIN}])
read(3, "8\0\0\0\n5.1.58-log\0\3\0\0\0K-?4'fL+\0\377\367!"..., 16384) = 60
...
read(3, "\7\0\0\2\0\0\0\2\0\0\0", 16384) = 11
                # first PHP echo
write(1, "Connection done\n", 16Connection done    )       = 16
                # second PHP echo
write(1, "this \\' is a test", 17this \' is a test)      = 17
munmap(0x7f62e187a000, 528384)          = 0
....

唯一重要的是由echo语句引起的两次写入之间没有其他系统调用 – 如果没有系统调用(无论如何来自linux中的用户空间),都不可能进行网络通信.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...