close
因為要防止 SQL injection,需要做參數化查詢。以往都是把參數 (SQL params) 先放在 array,再把 SQL 與 array 記錄到 log 裡,不過總覺得這做法不太直覺,每次要 debug 也要自己在那邊兜來兜去。
上網查一下發現有 PDOStatement::debugDumpParams 這個函式可以用,可以印出原始的 SQL(未代入參數)、代入參數後的 SQL、各參數,不過這個 function 是無回傳值的 (void),會直接印出到畫面上。
查了一下有一篇 "Something like debugDumpParams in pdo settable to a string",利用緩衝區先把 debugDumpParams() 的內容接住:
<?php
function pdo_debugStrParams($stmt) {
ob_start(); // 打開緩衝區
$stmt->debugDumpParams(); // $stmt 為 PDOStatement 物件,此行會把資訊先輸出到緩衝區裡
$r = ob_get_contents(); // 將緩衝區內容放到變數 $r 裡面
ob_end_clean(); // 清除緩衝區
return $r;
}
?>
這樣就可以把 PDO statement 丟過去,讓它直接轉換成字串記錄下來了。
文章標籤
全站熱搜