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 丟過去,讓它直接轉換成字串記錄下來了。

arrow
arrow
    文章標籤
    mysql php pdo
    全站熱搜
    創作者介紹
    創作者 小攻城師 的頭像
    小攻城師

    小攻城師的戰場筆記

    小攻城師 發表在 痞客邦 留言(0) 人氣()