webentwicklung-frage-antwort-db.com.de

Holen Sie sich die Abfrage von der PDO-Anweisung zurück

Gibt es eine Möglichkeit, die Abfrage abzurufen, die zum Generieren eines PDO Prepared-Anweisungsobjekts verwendet wurde?

46
ChrisR
31
Arkh

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.

9
myesain

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. 

0
Ifeanyi Amadi

Eigenwerbung: https://github.com/ellisgl/GeekLab-GLPDO Sie können die erwartete Abfrage mit der Debug-Methode ausgeben. Ich habe es kürzlich aktualisiert. 

0
EllisGL