Фактът, че използва библиотеката 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
....
Единственото важно нещо там е двете write
причинени от echo
операторите нямат друго системно повикване между тях - никаква мрежова комуникация не е възможна без системно извикване (все пак от потребителското пространство в Linux).