Mysql kütüphanesini kullandığı gerçeği, 'u değil, sunucu ile gidiş dönüş yapıyor demektir.
Bu, php yorumlayıcınızla aynı işlemde yüklü olan mysql istemci kitaplığından kod çalıştırır. Yine de bir bağlantıya ihtiyacınız var - bu fonksiyonun düzgün çalışması için bazı sunucu ayarlarını bilmesi gerekiyor. Ancak bu ayarlar PHP tarafındaki bağlantı bilgilerinde önbelleğe alınır.
siz (ve linux üzerinde konum) bunu doğrulamak için, gibi basit bir senaryo yazmaya:
<?php
$link = mysql_connect('localhost', 'user', 'pass');
echo "Connection done\n";
echo mysql_real_escape_string("this ' is a test");
?>
Ve strace
aracılığıyla çalıştırın:
$ 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
....
orada sadece önemli şey Bu, echo
ifadelerinin neden olduğu iki write
ifadesinin arada başka bir sisteme sahip olmamasıdır - bir ağ iletişimi olmadan bir syscall olmadan bağlantı mümkün değildir (yine de linux'taki kullanıcı alanından).
Neden bu hata iletisini alırım, mysql_real_escape_string işlevini herhangi bir veritabanına bağlantı olmadan kullanmaya çalışıyorum: 'Kullanıcı 'a3160679' @ 'localhost' için erişim reddedildi (parola kullanma: NO)/home/a3160679/public_html/index.php on line 51' – Pacerier
Bir bağlantıya ihtiyacınız vardır, çünkü bu işlev aslında bazı sunucu ayarlarına bağlıdır (bağlantı bilgilerinde önbelleğe alınır). – Mat