Fakta bahwa ia menggunakan perpustakaan mysql tidak tidak berarti ia melakukan perjalanan pulang pergi dengan server.
Ini menjalankan kode dari perpustakaan klien mysql, dimuat dalam proses yang sama dengan juru bahasa php Anda. Anda memang memerlukan koneksi - fungsi itu perlu mengetahui beberapa pengaturan server untuk beroperasi dengan benar. Tetapi pengaturan tersebut di-cache di informasi koneksi di sisi PHP.
Jika Anda ingin memverifikasi ini (dan Anda menggunakan linux), tulis skrip sederhana seperti:
<?php
$link = mysql_connect('localhost', 'user', 'pass');
echo "Connection done\n";
echo mysql_real_escape_string("this ' is a test");
?>
Dan jalankan melalui 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
....
Satu-satunya hal yang penting adalah bahwa keduanya write
s disebabkan oleh echo
pernyataan tidak memiliki syscall lain di antaranya - tidak ada komunikasi jaringan yang mungkin tanpa syscall (dari ruang pengguna di linux).