我有一個簡單的函數,它根據某些條件從數據庫表中返回一個計數。PHP PDO動態WHERE子句
function MyCount($strTable, $strCriteria) {
$strSQL = "SELECT COUNT(*) FROM " . $strTable . " ";
if (trim($strCriteria) != "") $strSQL .= "WHERE " . $strCriteria;
$results = mysql_query($strSQL, $objConn);
$row = mysql_fetch_array($results);
return $row[0];
}
它非常有用的在1行代碼很快得到一個數值,例如:
$Users = MyCount("Users", "Deleted = 0");
不過,我現在想移動到PDO時遇到傳入分別爲麻煩參數化值。我試圖做類似下面的(不工作):
$objQuery=$objConn->prepare("SELECT count(*) as TheCount FROM :table_name WHERE :criteria");
$objQuery->bindParam(':table_name', $strTable);
$objQuery->bindParam(':criteria', $strCriteria);
我想最明顯的是:
$objQuery=$objConn->prepare("SELECT count(*) as TheCount FROM :table_name WHERE ".$strCriteria");
$objQuery->bindParam(':table_name', $strTable);
但是,這似乎違背的參數化精神價值觀......有沒有人有任何其他建議?
感謝
你能不能一個額外的參數添加到函數,$用戶= mycount的( 「TABLE」, 「標準」,「價值「);那麼你可以用PDO檢查... WHERE $ CRITERIA =:VALUE,然後綁定該值? – 2014-09-06 05:26:51
好主意,但另一種方法的靈活性是我可以傳入更多complecx查詢 - 例如刪除= 0 AND(電子郵件='或OR電話='') – JezB 2014-09-06 05:31:03
它很好,你切換到一個更好的擴展,無論如何,你可以綁定表名和列名,你只能在那裏輸入白名單 – Ghost 2014-09-06 05:37:51