Gibt es eine Möglichkeit, die Abfrage abzurufen, die zum Generieren eines PDO Prepared-Anweisungsobjekts verwendet wurde?
Versuchen Sie $ statement-> queryString .
Wenn Sie das standardmäßige\PDO- und\PDOStatement-Objekt nicht erweitern möchten, sollten Sie Folgendes in Betracht ziehen:
github.com/noahheck/E_PDOStatement
Mit dieser PDO-Erweiterung können Sie eine vollständige Abfrageanweisung als Beispiel dafür sehen, was auf Datenbankebene ausgeführt werden kann. Es verwendet Regex, um die gebundenen Parameter Ihrer PDO-Anweisung zu interpolieren.
Durch die Erweiterung der Standarddefinition\PDOStatement kann E_PDOStatement diese Erweiterung der Standardfunktionalität anbieten, ohne dass der normale Arbeitsablauf geändert werden muss.
Disclaimer: Ich habe diese Erweiterung erstellt.
Ich hoffe nur, dass es für jemand anderen hilfreich ist.
Diese Prozedur funktioniert. Da debugDumpParams () die Ausgabe nicht zurückgibt. Hier ist ein kleiner Trick, den ich entworfen habe.
// get the output before debugDumpParams() get executed
$before = ob_get_contents();
//start a new buffer
ob_start();
// dump params now
$smt->debugDumpParams();
// save the output in a new variable $data
$data = ob_get_contents();
// clean the output screen
ob_end_clean();
// display what was before debugDumpParams() got executed
printf("%s", $before);
$statement = "";
// Now for prepared statements
if (stristr($data, 'Sent SQL') !== false)
{
// begin extracting from "Sent SQL"
$begin = stristr($data, 'Sent SQL');
// get the first ] square bracket
$square = strpos($begin, "]");
// collect sql
$begin = substr($begin, $square + 1);
$ending = strpos($begin, "Params");
$sql = substr($begin, 0, $ending);
$sql = trim($sql);
// sql statement here
$statement = $sql;
}
else
{
if (stristr($data, 'SQL') !== false)
{
$begin = stristr($data, 'SQL');
// get the first ] square bracket
$square = strpos($begin, "]");
// collect sql
$begin = substr($begin, $square + 1);
$ending = strpos($begin, "Params");
$sql = substr($begin, 0, $ending);
$sql = trim($sql);
$statement = $sql;
}
}
// statement here
echo $statement;
Hoffe das hilft.
Eigenwerbung: https://github.com/ellisgl/GeekLab-GLPDO Sie können die erwartete Abfrage mit der Debug-Methode ausgeben. Ich habe es kürzlich aktualisiert.