Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Mỗi cuộc gọi đến mysql_real_escape_string có yêu cầu một chuyến đi khác đến cơ sở dữ liệu không?

Thực tế là nó sử dụng thư viện mysql không có nghĩa là nó thực hiện một chuyến đi khứ hồi với máy chủ.

Nó chạy mã từ thư viện máy khách mysql, được tải trong cùng một quy trình với trình thông dịch php của bạn. Tuy nhiên, bạn cần có kết nối - chức năng đó cần biết một số cài đặt máy chủ để hoạt động bình thường. Nhưng những cài đặt đó được lưu vào bộ nhớ đệm trong thông tin kết nối ở phía PHP.

Nếu bạn muốn xác minh điều này (và bạn đang sử dụng linux), hãy viết một tập lệnh đơn giản như:

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

Và chạy nó qua 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
....

Điều quan trọng duy nhất ở đó là hai write do echo gây ra các câu lệnh không có cuộc gọi tổng hợp nào khác ở giữa - không thể giao tiếp mạng nào mà không có cuộc gọi điện thoại tổng hợp (từ không gian người dùng trong linux).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Biểu thức mysql NOW () trong Doctrine QueryBuilder

  2. chọn * từ hai bảng có số cột khác nhau

  3. Trả về một đối tượng JSON bằng cách sử dụng PHP json_encode () &MySQL để chuyển đến hàm jQuery

  4. Lấy dấu thời gian bằng MySQL

  5. dữ liệu biểu mẫu đã nhập không được lưu trong db mysql?