我有一个简单的函数,它根据某些条件从数据库表中返回一个计数。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