PHP PDO动态WHERE子句

时间:2014-09-06 05:15:46

标签: 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,并且在传递参数化值时遇到了麻烦。我尝试做类似下面的事情(它不起作用):

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

但是,这似乎违背了参数化价值观的精神......有没有人有任何其他建议?

由于

1 个答案:

答案 0 :(得分:2)

这一行是问题所在:

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

您只能绑定field= :value {strong} 绑定表名或列名或自定义动态where子句的值PDO

所以你只需手动构建查询:

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);
相关问题