PHP PDO 动态 WHERE 子句

标签 php mysql sql pdo

我有一个简单的函数,它根据某些条件从数据库表中返回一个计数。

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,但在将 were 作为参数化值传递时遇到了问题。我正在尝试执行以下操作(不起作用):

$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);

但是,这似乎违背了参数化值的精神……还有其他建议吗?

谢谢

最佳答案

这一行是问题所在:

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

您只能在 PDO 中绑定(bind)值 (field= :value) 您不能绑定(bind)表名或列名或自定义动态 where 子句.

因此您只需手动构建查询:

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

关于PHP PDO 动态 WHERE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25697050/

相关文章:

php - 基于 SQL 标志值的颜色编码 html 表格单元格

c# - 使用c#在sqlite表中分页

php - 在 Woocommerce 中显示或隐藏两个结账字段

php - 不允许我使用 where 子句插入值

mysql - Mysql中三表无重复减去一张表的并集

php - 谷歌地图、PHP 和 MySQL : Create multiple markers on map using various options together

php - 我的 PayPal 脚本突然停止验证 SSL 证书

php - Laravel 的用户配置文件路线?无/用户

sql - 将多个记录(行)合并为单个记录(行)

php - 如何在 XAMPP 中集成 sqlite 扩展?