2011-10-27 8 views
5

5 lat temu (! Naprawdę) Wez Furlong był głównym twórcą PDO i pisał tak:Czy mogę teraz używać rzeczywistych instrukcji dla MySQL z PDO?

Polecam skorzystanie następujący atrybut podczas pracy z PDO :: mysql, dostępne w bieżącym PHP 5.1.3 wydania kandydatów i migawek:

$ db-> setAttribute (PDO :: ATTR_EMULATE_PREPARES, true);

Powoduje to użycie natywnego parsera zapytań PDO zamiast własnych instrukcji API w kliencie mysql, a skutecznie eliminuje te problemy.

uzasadnienie podano w http://wezfurlong.org/blog/2006/apr/using-pdo-mysql/

Jednak on nie mógł odpowiedzieć, czy problemy zostały naprawione teraz, że PDO korzysta Mysqlnd (przynajmniej ja zakładam, że jest).

Czy ktoś wie?

Odpowiedz

6

Tak, jeśli ustawisz ATTR_EMULATE_PREPARES na false (lub 0), użyje on prawdziwych przygotowanych wyciągów.

Sortuj. Wciąż ma całą logikę awaryjną. Tak więc, podczas gdy mysqli :: prepare zakończy się niepowodzeniem, jeśli przygotowanie z serwera nie powiedzie się, PDO nie będzie tak, jak będzie się on powracał do emulacji przygotowania. Powodem tego jest to, że PDO może używać przygotowanych oświadczeń dotyczących wersji MySQL, które go nie obsługują, a także instrukcji (takich jak ALTER), które nie obsługują przygotowania.

Użyje więc prawdziwych instrukcji, kiedy MySQL Ci pozwoli (ponownie, tylko jeśli ATTR_EMULATE_PREPARES fałsz) ...

Powiązane problemy