Die Funktionsweise der parametrisierten PDO-Abfrage

8

LESEN SIE DIE FRAGE SORGFÄLTIG DURCH. Es ist nicht üblich dumm "mein Code funktioniert nicht !!!" Frage.

Wenn ich diesen Code mit beabsichtigter Fehler

ausführe %Vor%

Ich bekomme diese Fehlermeldung

  

Sie haben einen Fehler in Ihrer SQL-Syntax ... nahe 'INN (' I \ 'm', 'd \' Artagnan ')' in Zeile 1

Aber ich dachte schon seit Jahren, dass die Abfrage und die Daten getrennt an den Server gesendet werden und sich niemals gegenseitig stören. So habe ich einige Fragen (obwohl ich bezweifle, dass jemand eine Antwort bekommen hat ...)

  1. Wo bekommt man eine so bekannte String-Darstellung - zitiert und geflutet? Wird es speziell zur Meldung eines Fehlers erstellt oder ist es Teil der eigentlichen Abfrage?
  2. Wie funktioniert das in Wirklichkeit? Ersetzt es einen Platzhalter durch Daten oder nicht?
  3. Gibt es eine Möglichkeit, die ganze Abfrage, nicht nur ein kleines bisschen, zu Debugging-Zwecken zu bekommen?

Aktualisieren

mysqli macht es wie erwartet: es wird ein Fehler mit near 'INN(?,?)'

ausgegeben     
Your Common Sense 16.09.2010, 13:35
quelle

2 Antworten

7

versuche,

hinzuzufügen %Vor%

;)

    
user187291 16.09.2010, 15:28
quelle
7

Ich bin mir nicht sicher über alle Details, aber ich werde versuchen zu antworten.

  1. Das Zitat passiert auf der Datenbankseite. Die Datenbank entkernt und bereinigt alle Werte (siehe Punkt 2), die sie empfängt, damit sie korrekt interpretiert werden. In dem Moment, in dem der Fehler ausgelöst wird, gibt die Datenbank (in diesem Fall MySQL) die Abfrage aus, die sie auszuführen versucht hat. Dies wäre nicht so hilfreich, wenn es nur den vorbereiteten Teil zeigt.

  2. Nein, tut es nicht. Zur Vorbereitungszeit wird die Abfrage auf der Serverseite kompiliert. Wenn eine Abfrage mit Werten ausgeführt wird, werden nur die Werte übertragen. Dies entspricht ungefähr dem Aufruf von PREPARE und EXECUTE in der Datenbank.

  3. Dies hängt von der verwendeten Datenbank ab. MySQL kann beispielsweise alle Abfragen in einer Protokolldatei protokollieren (überprüfen Sie dazu meine Einstellungen von my.cnf). Sie können aber auch debugDumpParams () auf PHP-Seite verwenden.

Ich hoffe, das war ein bisschen hilfreich.

    
Dan Soap 16.09.2010 13:42
quelle

Tags und Links