sql >> Databáze >  >> RDS >> Mysql

vyžaduje každé volání mysql_real_escape_string další cestu do databáze?

Skutečnost, že používá knihovnu mysql, ne znamená, že se serverem obejde.

Spouští kód z klientské knihovny mysql, načtený stejným procesem jako váš php interpret. Potřebujete však připojení – tato funkce potřebuje znát některá nastavení serveru, aby správně fungovala. Ale tato nastavení jsou uložena v mezipaměti v informacích o připojení na straně PHP.

Pokud to chcete ověřit (a jste na linuxu), napište jednoduchý skript jako:

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

A spusťte jej pomocí 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
....

Jediná důležitá věc je, že ty dva write je způsobeno echo příkazy nemají mezi sebou žádné jiné systémové volání – žádná síťová komunikace není možná bez systémového volání (stejně z uživatelského prostoru v linuxu).




  1. Je to dobré schéma DB pro umístění

  2. Chyba při přístupu k EntityManager - openjpa - WAS liberty profile

  3. Zbavte se duplicitních hodnot v jednom sloupci ve výběru dvou sloupců

  4. Jak zjistíte velikost disku tabulky Postgres / PostgreSQL a její indexy