Question

I have a script statistics.php

<?php
header('Content-Type: text/html; charset=utf-8');
//Параметры для соединения с БД
define('DB_SERVER', 'localhost');
define('DB_USERNAME','administrator');
define('DB_PASSWORD', '<remove>');
define('DB_DATABASE', 'medpalata74');
//Подключение класса для соединения к БД
require_once 'database_class.php';

//Соединение с БД
Database::Connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
$citiesArray = array('Челябинск', 'Аша', 'Бакал', 'Верхний Уфалей', 'Еманжелинск', 'Златоуст', 'Карабаш', 'Карталы', 'Касли', 'Катав-Ивановск', 'Коркино', 'Куса', 'Кыштым', 'Магнитогорск', 'Миасс', 'Миньяр',  'Нязепетровск', 'Сатка', 'Сим', 'Снежинск', 'Трехгорный', 'Троицк', 'Усть-Катав', 'Чебаркуль', 'Южноуральск', 'Юрюзань');

$table = "Participants";
$rows = '*';
$output = '['.'<br />';
for ($i=0; $i < sizeof($citiesArray); $i++) { 
    $where = "lpu like '%".$citiesArray[$i]."%'";
    Database::setEncoding();
    $selectResult = Database::Select($table, $rows, $where);
    if($i<sizeof($citiesArray)-1){
        $line = '{"city":"'.$citiesArray[$i].'","percentage":"'.sizeof($selectResult).'"},'.'<br />';
    }
    else{
        $line = '{"city":"'.$citiesArray[$i].'","percentage":"'.sizeof($selectResult).'"}'.'<br />';
    }
    $output .= $line;
    $selectResult ="";
} 
$output .= ']';
echo $output;
// Закрываем соединение с базой данных
Database::Close();
?>

This script makes a query for each city and as a result i get number of result rows in mysql(by now) and then script generates output like

[
{"city":"Челябинск","percentage":"0"},
{"city":"Аша","percentage":"0"},
{"city":"Бакал","percentage":"0"},
{"city":"Верхний Уфалей","percentage":"0"},
{"city":"Еманжелинск","percentage":"0"},
{"city":"Златоуст","percentage":"0"},
{"city":"Карабаш","percentage":"0"},
{"city":"Карталы","percentage":"0"},
{"city":"Касли","percentage":"0"},
{"city":"Катав-Ивановск","percentage":"0"},
{"city":"Коркино","percentage":"0"},
{"city":"Куса","percentage":"0"},
{"city":"Кыштым","percentage":"0"},
{"city":"Магнитогорск","percentage":"0"},
{"city":"Миасс","percentage":"2"},
{"city":"Миньяр","percentage":"3"},
{"city":"Нязепетровск","percentage":"3"},
{"city":"Сатка","percentage":"3"},
{"city":"Сим","percentage":"3"},
{"city":"Снежинск","percentage":"3"},
{"city":"Трехгорный","percentage":"3"},
{"city":"Троицк","percentage":"3"},
{"city":"Усть-Катав","percentage":"3"},
{"city":"Чебаркуль","percentage":"3"},
{"city":"Южноуральск","percentage":"3"},
{"city":"Юрюзань","percentage":"3"}
]

The problem is:

  • "city":"Миасс" has 2 result rows - that's ok
  • "city":"Миньяр" has 1 result row, but there's 3
  • all the next cities have 0 result rows, but there's 3

database_class.php

<?php
//Класс для соединения с ДБ
class Database{
    public static $connectDB;//результат соединения со средой
    public static $selectDB;//результат выбора БД
    public static $numResults;
    public static $res;
    public static $ins;
    public static $del;

    //Метод для соединения с БД
    public static function Connect($host, $user, $pass, $name){
        //Попытка соединения с БД
        self::$connectDB = mysql_connect($host, $user, $pass);
        if(!self::$connectDB){
            echo "Подключение к серверу БД не удалось. Ошибка: '".mysql_error()."'";
            exit();
            return false;
        }
        //Выбор нужной БД
        self::$selectDB = mysql_select_db($name, self::$connectDB);
        if(!self::$selectDB){
            echo "Не удалось выбрать требуемую БД. Ошибка: '".mysql_error()."'";
            exit();
            return false;
        }
        //Возвращение результата
        return self::$connectDB;
    }

    //Метод для выбоа данных из таблицы
    public static function Select($tableName, $rows='*', $where = null){
        $q = 'select '.$rows.' from ' .$tableName;
        if ($where != null){
            $q .= ' where '.$where;
        } 
        //echo $q.'<br />';
        $query = mysql_query($q);
        $res = array();
        if($query){
            self::$numResults = mysql_num_rows($query);

            for($i=0; $i<self::$numResults; $i++){
            self::$res[]= mysql_fetch_array($query, MYSQL_NUM); 
            }
            //echo "ok";
            return self::$res;
        }
        else{
            echo "Ошибка: '".mysql_error()."'";
            return false;
        }
    }

    //Метод для добавления записи в таблицу
    public static function Insert($tableName, $values, $rows = null){
        $insert = 'insert into '.$tableName;
        if ($rows != null) {
            $insert .= ' ('.$rows.')';
        }
        $insert .= ' values ('.$values.')';
        $ins = mysql_query($insert);
        //echo $insert;
        if($ins){
            //echo "ok";
            return true;
        }
        else{
            echo "Ошибка: '".mysql_error()."'";
            return false;
        }
    }

    // Метод для удаления записи из таблицы
    public static function Delete($tableName, $where = null){
        if($where == null){
            $delete = 'delete '.$tableName;
        }
        else{
            $delete = 'delete from '.$tableName.' where '.$where;
        }
        //echo $delete;
        $del = mysql_query($delete);
        if ($del) {
            echo "ok";
            return true;
        }
        else{
            echo "Ошибка: '".mysql_error()."'";
            return false;
        }
    }

    //Метод для обновления записи в таблице
    public static function Update($tableName, $set, $where = null){
        if($where == null){
            $update = 'update '.$tableName.' set '.$set;
        }
        else{
            $update = 'update '.$tableName.' set '.$set.' where '.$where;
        }
        //echo $update;
        $upd = mysql_query($update);
        if ($upd){
            return true;
        }
        else{
            echo "Ошибка: '".mysql_error()."'";
            return false;
        }
    }

    //Метод для закрытия соединения с БД
    public static function Close(){
        return mysql_close(self::$connectDB);
    }

    //Метод для установки кодировки
    public static function setEncoding(){
        $encoding = 'SET NAMES utf8';
        $enc = mysql_query($encoding);
        if ($enc){
            return true;
        }
        else{
            echo "Ошибка: '".mysql_error()."'";
            return false;
        }
    }
}
?>

What can possibly cause that bug?

Was it helpful?

Solution

try this code :

<?php
header('Content-Type: text/html; charset=utf-8');
//Параметры для соединения с БД
define('DB_SERVER', 'localhost');
define('DB_USERNAME','administrator');
define('DB_PASSWORD', '<removed>');
define('DB_DATABASE', 'medpalata74');
//Подключение класса для соединения к БД
require_once 'database_class.php';

//Соединение с БД
Database::Connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
$citiesArray = array('Челябинск', 'Аша', 'Бакал', 'Верхний Уфалей', 'Еманжелинск', 'Златоуст', 'Карабаш', 'Карталы', 'Касли', 'Катав-Ивановск', 'Коркино', 'Куса', 'Кыштым', 'Магнитогорск', 'Миасс', 'Миньяр',  'Нязепетровск', 'Сатка', 'Сим', 'Снежинск', 'Трехгорный', 'Троицк', 'Усть-Катав', 'Чебаркуль', 'Южноуральск', 'Юрюзань');

$table = "Participants";
$rows = '*';
$output = '['.'<br />';
Database::setEncoding();
for ($i=0; $i < sizeof($citiesArray); $i++) { 
    $where = "lpu like '%".$citiesArray[$i]."%'";
    Database::setEncoding();
    $selectResult = Database::Select($table, $rows, $where);
    $numRows=Database::numRows();
    if($i<sizeof($citiesArray)-1){
        $line = '{"city":"'.$citiesArray[$i].'","percentage":"'.$numRows.'"},'.'<br />';
    }
    else{
        $line = '{"city":"'.$citiesArray[$i].'","percentage":"'.$numRows.'"}'.'<br />';
    }
    $output .= $line;
    $selectResult ="";
    unset($selectResult);
} 
$output .= ']';
echo $output;
// Закрываем соединение с базой данных
Database::Close();
?>

use this class:

<?php
//Класс для соединения с ДБ
class Database{
    public static $connectDB;//результат соединения со средой
    public static $selectDB;//результат выбора БД
    public static $numResults;
    public static $res;
    public static $ins;
    public static $del;

    public static function numRows(){
        return self::$numResults;
    }

    //Метод для соединения с БД
    public static function Connect($host, $user, $pass, $name){
        //Попытка соединения с БД
        self::$connectDB = mysql_connect($host, $user, $pass);
        if(!self::$connectDB){
            echo "Подключение к серверу БД не удалось. Ошибка: '".mysql_error()."'";
            exit();
            return false;
        }
        //Выбор нужной БД
        self::$selectDB = mysql_select_db($name, self::$connectDB);
        if(!self::$selectDB){
            echo "Не удалось выбрать требуемую БД. Ошибка: '".mysql_error()."'";
            exit();
            return false;
        }
        //Возвращение результата
        return self::$connectDB;
    }

    //Метод для выбоа данных из таблицы
    public static function Select($tableName, $rows='*', $where = null){
        $q = 'select '.$rows.' from ' .$tableName;
        if ($where != null){
            $q .= ' where '.$where;
        } 
        //echo $q.'<br />';
        $query = mysql_query($q);
        $res = array();
        if($query){
            self::$numResults = mysql_num_rows($query);

            for($i=0; $i<self::$numResults; $i++){
            self::$res[]= mysql_fetch_array($query, MYSQL_NUM); 
            }
            //echo "ok";
            return self::$res;
        }
        else{
            echo "Ошибка: '".mysql_error()."'";
            return false;
        }
    }

    //Метод для добавления записи в таблицу
    public static function Insert($tableName, $values, $rows = null){
        $insert = 'insert into '.$tableName;
        if ($rows != null) {
            $insert .= ' ('.$rows.')';
        }
        $insert .= ' values ('.$values.')';
        $ins = mysql_query($insert);
        //echo $insert;
        if($ins){
            //echo "ok";
            return true;
        }
        else{
            echo "Ошибка: '".mysql_error()."'";
            return false;
        }
    }

    // Метод для удаления записи из таблицы
    public static function Delete($tableName, $where = null){
        if($where == null){
            $delete = 'delete '.$tableName;
        }
        else{
            $delete = 'delete from '.$tableName.' where '.$where;
        }
        //echo $delete;
        $del = mysql_query($delete);
        if ($del) {
            echo "ok";
            return true;
        }
        else{
            echo "Ошибка: '".mysql_error()."'";
            return false;
        }
    }

    //Метод для обновления записи в таблице
    public static function Update($tableName, $set, $where = null){
        if($where == null){
            $update = 'update '.$tableName.' set '.$set;
        }
        else{
            $update = 'update '.$tableName.' set '.$set.' where '.$where;
        }
        //echo $update;
        $upd = mysql_query($update);
        if ($upd){
            return true;
        }
        else{
            echo "Ошибка: '".mysql_error()."'";
            return false;
        }
    }

    //Метод для закрытия соединения с БД
    public static function Close(){
        return mysql_close(self::$connectDB);
    }

    //Метод для установки кодировки
    public static function setEncoding(){
        $encoding = 'SET NAMES utf8';
        $enc = mysql_query($encoding);
        if ($enc){
            return true;
        }
        else{
            echo "Ошибка: '".mysql_error()."'";
            return false;
        }
    }
}
?>

I think the problem is because you can't empty $selectResult well.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top