У меня есть простая функция, которая возвращает количество из таблицы базы данных, основанное на некоторых критериях.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);
Но это, кажется, идет вразрез с духом параметризованная ценности ... есть ли у кого-нибудь другие предложения?
Благодаря
может не добавить дополнительный параметр в функции $ Users = MyCount ("TABLE", "критерии", "VALUE «); то вы можете проверить с помощью PDO с помощью ... WHERE $ CRITERIA =: VALUE, а затем привязать значение? –
Хорошая идея, но гибкость другого метода заключалась в том, что я мог бы передавать более полные запросы - например, Deleted = 0 AND (Email = '' OR Phone = '') – JezB
Хорошо, что вы переключаетесь на лучшее расширение, в любом случае вы можете связывать имена таблиц и имена столбцов, вы можете вводить только белый список – Ghost