php pdo mysql where,PHP PDO动态WHERE子句

I have a simple function that returns a count from a database table, based on some criteria.

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];

}

Its very useful for quickly getting a value in 1 line of code, e.g:

$Users = MyCount("Users", "Deleted = 0");

However, I'm now trying to move to PDO and am having trouble passing in the were as parametrized values. I'm trying to do something like the below (which doesn't work):

$objQuery=$objConn->prepare("SELECT count(*) as TheCount FROM :table_name WHERE :criteria");

$objQuery->bindParam(':table_name', $strTable);

$objQuery->bindParam(':criteria', $strCriteria);

I guess the obvious would be:

$objQuery=$objConn->prepare("SELECT count(*) as TheCount FROM :table_name WHERE ".$strCriteria");

$objQuery->bindParam(':table_name', $strTable);

But, this seems to go against the spirit of parametrized values... does anyone have any other suggestions?

Thanks

解决方案

This line is the issue:

$objQuery->bindParam(':table_name', $strTable);

You can only bind values ( field= :value) in PDO you cannot bind table names or column names or custom dynamic where clause.

So you just build the query manually:

SELECT count(*) as TheCount FROM `$strTable` WHERE $strCriteria

function my_count($strTable, $strCriteria, $objConn)

{

$sql ="SELECT count(*) as TheCount FROM $strTable WHERE $strCriteria";

$objQuery=$objConn->query($sql);

$row =$objQuery->fetch();

return $row['TheCount'];

}

$Users = my_count("Users", "Deleted = 0", $objConn);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值