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

PDO wysyła surowe zapytanie do MySQL, podczas gdy Mysqli wysyła przygotowane zapytanie, oba dają ten sam wynik

Twoje PDO jest skonfigurowane do emulowania przygotowanych zapytań, podczas gdy mysqli używa prawdziwych przygotowanych zapytań.

Przygotowane zapytanie wiąże ciąg ''1'' jako wartość parametru całkowitego. PHP przekształca go w liczbę całkowitą za pomocą czegoś takiego jak intval() . Każdy ciąg znaków z nienumerycznymi znakami wiodącymi jest interpretowany przez PHP jako 0, więc wartość parametru wysyłana jest po przygotowanie to wartość 0.

Fałszywe przygotowane zapytanie wykorzystuje interpolację ciągów (zamiast wiązania), aby dodać ciąg ''1'' do zapytania SQL przed MySQL analizuje to. Ale wynik jest podobny, ponieważ SQL traktuje również łańcuch z nienumerycznymi znakami wiodącymi w kontekście całkowitym jako wartość 0.

Jedyną różnicą jest to, co kończy się w ogólnym dzienniku zapytań, gdy parametr jest powiązany przed przygotowaniem, a co po przygotowaniu.

Możesz także sprawić, by PDO używało prawdziwych, przygotowanych zapytań, więc powinno działać tak jak mysqli w tym przypadku:

$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

PS:może to wskazywać na dobry powód, dla którego zwyczajowo zaczyna się wartości identyfikatorów od 1 zamiast od 0.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. zaloguj się jako Administrator i zwykły użytkownik

  2. Jak zbudować silnik „powiązanych pytań”?

  3. Usuwanie duplikatów w MySQL

  4. Jak zaktualizować kolumnę typu danych JSON w MySQL 5.7.10?

  5. Podziały odczytu/zapisu przy użyciu Zend_Db