Функция для подсчета строк MySQL, используя WHERE - PullRequest
0 голосов
/ 24 февраля 2012

Я делаю функцию для подсчета строк, используя "WHERE", но я получаю ошибку mysql

Предупреждение: mysql_num_rows (): предоставленный аргумент не является допустимым ресурсом результата MySQL в C: \ AppServ \ www \ test\ test \ index.php в строке 9 Неизвестный столбец '1' в 'выражении where'

вот моя функция

    function CountRows($table, $field = NULL, $value = NULL){
        mysql_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD);
        mysql_select_db(DB_NAME);
        if($field != NULL && $value != NULL){
            return mysql_num_rows(mysql_query("SELECT * FROM `".$table."` WHERE `".$field."` = `".$value."`"))or die(mysql_error());
        }else{
            return mysql_num_rows(mysql_query("SELECT * FROM `".$table."`"));   
        }
    }

я создал эту функцию для упрощения подсчета строк строк mysqlдля заблокированных участников, неактивных участников и т. д., поскольку все будут использовать WHERE

, вся помощь будет оценена, заранее спасибо

Ответы [ 3 ]

1 голос
/ 24 февраля 2012

Дополнительно:

  1. Не подключайте / не выбирайте базу данных в функции. Это должно быть сделано один раз в начале каждой страницы, не более (если не требуется несколько соединений).

  2. Не SELECT * только для того, чтобы вы могли вычислить количество строк. Вместо этого используйте MySQL COUNT () .

    $result = mysql_query("SELECT COUNT(0) AS numRows FROM aTable");
    $numRows = mysql_result($result, 0, 'numRows');
    
  3. НЕ ИСПОЛЬЗУЙТЕ свою функцию с пользовательским вводом, не предпринимая соответствующих действий, чтобы обезопасить себя от внедрения SQL.

1 голос
/ 24 февраля 2012
  1. Не следует подключаться к базе данных каждый раз, когда вам нужно выполнить запрос. Просто сохраняйте постоянное соединение или в идеале используйте PDO.

  2. Значение должно быть заключено в простые одинарные кавычки. Это, вероятно, то, что приводит вас к ошибке, поскольку все, что заключено в кавычки, является именем базы данных / таблицы / поля.

  3. Используйте COUNT (*), он не выбирает все строки базы данных.

  4. Если значение может быть предоставлено пользователем, убедитесь, что оно безопасно, экранируя его с помощью mysql_real_escape_string, если не используется PDO.

Без использования кода PDO будет:

mysql_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD);
mysql_select_db(DB_NAME);

function CountRows($table, $field = NULL, $value = NULL){

    if ($field != NULL && $value != NULL) {
        $query = "SELECT COUNT(*) 
                  FROM `".$table."` 
                  WHERE `".$field."` = '". mysql_real_escape_string($value) . "'";
    } else {
        $query = "SELECT COUNT(*) FROM `".$table."`";   
    }

    $count = mysql_fetch_array(mysql_query($query));
    return $count[0];
}
1 голос
/ 24 февраля 2012

Backticks (`) предназначены для включения имен таблиц и столбцов.Не заключайте в них $value, просто используйте одинарные кавычки (').

Кроме того, нет причин, по которым вам нужно извлекать полный набор данных из БД и подсчитывать в нем строки.Просто запрос на счет:

    if($field != NULL && $value != NULL){
        $cnt = mysql_fetch_assoc(mysql_query("SELECT COUNT(*) as cnt FROM `".$table."` WHERE `".$field."` = '".$value."'"))or die(mysql_error());
    }else{
        $cnt = mysql_fetch_assoc(mysql_query("SELECT COUNT(*) as cnt FROM `".$table."`"));   
    }
    return $cnt['cnt'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...