Mysql
 sql >> Baza danych >  >> RDS >> Mysql

czy każde wywołanie mysql_real_escape_string wymaga kolejnej podróży do bazy danych?

Fakt, że używa biblioteki mysql, nie oznacza, że ​​robi podróż w obie strony z serwerem.

Uruchamia kod z biblioteki klienta mysql, ładowany w tym samym procesie, co twój interpreter php. Potrzebujesz jednak połączenia - ta funkcja musi znać niektóre ustawienia serwera, aby działać poprawnie. Ale te ustawienia są buforowane w informacjach o połączeniu po stronie PHP.

Jeśli chcesz to zweryfikować (a jesteś na Linuksie), napisz prosty skrypt, taki jak:

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

I uruchom go przez 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
....

Jedyną ważną rzeczą jest to, że dwa write są spowodowane przez echo instrukcje nie mają żadnego innego wywołania systemowego pomiędzy - żadna komunikacja sieciowa nie jest możliwa bez wywołania systemowego (i tak z przestrzeni użytkownika w Linuksie).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie SQL Update z klauzulą ​​group by

  2. Okresy zapytań MySQL i wartość maksymalnego spadku w porównaniu z poprzednią wartością maksymalną

  3. Wyszukiwanie pełnotekstowe z InnoDB w MySQL

  4. PHP:Jeśli rekord istnieje, wyświetlaj kod HTML, w przeciwnym razie nie wyświetlaj nic

  5. php/mysql z wieloma zapytaniami