ScotlandPHP

PDOStatement->debugDumpParams

(PHP 5 >= 5.1.0, PHP 7, PECL pdo >= 0.9.0)

PDOStatement->debugDumpParamsBir SQL hazır komutunu dökümler

Açıklama

bool PDOStatement::debugDumpParams ( void )

Bir hazır deyimin içerdiği bilgiyi doğrudan çıktıya dökümler. Bu bilgi, kullanımdaki SQL sorgusu (SQL), kullanılan değiştirge sayısı (Params), isim ve tamsayı olarak türleri (paramtype) ile değiştirge listesi, değiştirgelerin isimleri veya konumları, değerleri ve sorgudaki konumlarını (PDO sürücü destekliyorsa; yoksa -1'dir) içerir.

Bu işlev, veriyi doğrudan çıktıya basan bir hata ayıklama işlevidir.

İpucu

Sonuçlarını doğrudan tarayıcıya çıktılayan her şey gibi, çıktı denetleme işlevleri bu işlevin de çıktısını yakalamak ve (örneğin) string türünde saklamak için kullanılabilir.

İşlev, sadece deyim içindeki değiştirgeleri dökümler. Ek değiştirgeler deyimde saklanmaz ve gösterilmez.

Dönen Değerler

Hiçbir değer dönmez.

Örnekler

Örnek 1 - İsimli değiştirgelerle PDOStatement::debugDumpParams() örneği

<?php
/* PHP değişkenleriyle ilişkili bir hazır deyim çalıştıralım */
$calories 150;
$colour 'red';
$sth $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour'
);
$sth->bindParam(':calories'$caloriesPDO::PARAM_INT);
$sth->bindValue(':colour'$colourPDO::PARAM_STR12);
$sth->execute();

$sth->debugDumpParams();

?>

Yukarıdaki örneğin çıktısı:

SQL: [96] SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour
Params:  2
Key: Name: [9] :calories
paramno=-1
name=[9] ":calories"
is_param=1
param_type=1
Key: Name: [7] :colour
paramno=-1
name=[7] ":colour"
is_param=1
param_type=2

Örnek 2 - İsimsiz değiştirgelerle PDOStatement::debugDumpParams() örneği

<?php

/* PHP değişkenleriyle ilişkili bir hazır deyim çalıştıralım */
$calories 150;
$colour 'red';
$name 'apple';

$sth $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < ? AND colour = ?'
);
$sth->bindParam(1$caloriesPDO::PARAM_INT);
$sth->bindValue(2$colourPDO::PARAM_STR);
$sth->execute();

$sth->debugDumpParams();

?>

Yukarıdaki örneğin çıktısı:

SQL: [82] SELECT name, colour, calories
    FROM fruit
    WHERE calories < ? AND colour = ?
Params:  2
Key: Position #0:
paramno=0
name=[0] ""
is_param=1
param_type=1
Key: Position #1:
paramno=1
name=[0] ""
is_param=1
param_type=2

Ayrıca Bakınız

add a note add a note

User Contributed Notes 4 notes

up
51
thefox
4 years ago
This function doesn't print parameter values despite the documentation says it does. See https://bugs.php.net/bug.php?id=52384 (filed back in 2010).
up
17
mark at manngo dot net
4 years ago
As noted, this doesn’t actually simply print the prepared statement with data to be executed.

For trouble shooting purposes, I find the following useful:

<?php
   
function parms($string,$data) {
       
$indexed=$data==array_values($data);
        foreach(
$data as $k=>$v) {
            if(
is_string($v)) $v="'$v'";
            if(
$indexed) $string=preg_replace('/\?/',$v,$string,1);
            else
$string=str_replace(":$k",$v,$string);
        }
        return
$string;
    }

   
//    Index Parameters
       
$string='INSERT INTO stuff(name,value) VALUES (?,?)';
       
$data=array('Fred',23);

   
//    Named Parameters
       
$string='INSERT INTO stuff(name,value) VALUES (:name,:value)';
       
$data=array('name'=>'Fred','value'=>23);

    print
parms($string,$data);
?>
up
6
Lucas
1 year ago
This function doesn't have a return, so if you want to do something with it you'll have to do something like

<?php
function pdo_debugStrParams($stmt) {
 
ob_start();
 
$stmt->debugDumpParams();
 
$r = ob_get_contents();
 
ob_end_clean();
  return
$r;
}

// omitted: connect to the database and prepare a statement
echo '<pre>'.htmlspecialchars(pdo_debugStrParams($stmt)).'</pre>';
?

Source: http://stackoverflow.com/questions/22157331/something-like-debugdumpparams-in-pdo-settable-to-a-string
up
4
mattspopcorn at gmail dot com
8 years ago
It's not you, in PHP 5.2.6 and close versions this has an infinite loop bug.  Upgrade to the latest php where it has been fixed.
To Top