Загрузка...

Help! I have a fake error here

Thread in Web development created by AlloY Jun 13, 2018. 403 views

  1. AlloY
    AlloY Topic starter Jun 13, 2018 Banned
    Ребят, сижу на форумах, читаю и всё равно не получается пофиксить эту ошибку:
    Code
    Fatal error: Call to a member function fetch_assoc() on boolean in

    Вот сам код:
    PHP
    function getFields($tblName){
    $dbName = $this->getDBName();
    $result_set = $this->connection->query("SHOW COLUMNS IN `".$tblName."` IN ".$dbName);
    $res_arr = array();
    $i = 0;
    while ($row = $result_set->fetch_assoc()) {
    $res_arr[$i] = $row["Field"];
    $i++;
    }
    return $res_arr;
    }
    Жалуется на строку
    Code
    while ($row = $result_set->fetch_assoc()) {
     
  2. swmf
    swmf Jun 13, 2018 101 Dec 8, 2017
    AlloY, запрос на валидность проверь, скорее всего он невалиден, и скорее всего запрос твой возвращает FALSE
    Чекни что в результате запроса: var_dump($result_set);
     
  3. AlloY
    AlloY Topic starter Jun 13, 2018 Banned
    swmf, NULL Fatal error: Call to a member function fetch_assoc() on boolean
     
  4. USDC
    Код целиком показывай, а не этот кусок.
     
  5. swmf
    swmf Jun 13, 2018 101 Dec 8, 2017
    AlloY, NULL - значит в запросе ошибка
     
  6. AlloY
    AlloY Topic starter Jun 13, 2018 Banned
    @scr.asia,
    PHP
    <?php
    require_once "classConnection.php";

    class DB {
    private $connection;

    public function __construct() {
    $this->connection = new Connection();
    }

    function getDBName(){
    $result = $this->connection->query("SELECT DATABASE()");
    $row = $result->fetch_row();
    return $row[0];
    }

    function getTables(){
    $dbName = $this->getDBName();
    $result_set = $this->connection->query("SHOW TABLES IN ".$dbName);
    $res_arr = array();
    $i = 0;
    while ($row = $result_set->fetch_assoc()) {
    $res_arr[$i] = $row["Tables_in_".$dbName];
    $i++;
    }
    return $res_arr;
    }

    function getFields($tblName){
    $dbName = $this->getDBName();
    $result_set = $this->connection->query("SHOW COLUMNS IN `".$tblName."` IN ".$dbName);
    $res_arr = array();
    $i = 0;
    while ($row = $result_set->fetch_assoc()) {
    $res_arr[$i] = $row["Field"];
    $i++;
    }
    return $res_arr;
    }

    function checkRow($tblName, $field, $value){
    $result_set = $this->connection->query("SELECT COUNT(*) FROM `".$tblName."` WHERE `".$field."` = '".$value."'");
    while ($row = $result_set->fetch_assoc()) {
    if ($row["COUNT(*)"] > 0) return true;
    else return false;
    }
    }

    function truncateTable($tblName){
    $result = $this->connection->query("TRUNCATE TABLE `".$tblName."`");
    }

    function getRows($tblName, $field, $value){
    $result_set = $this->connection->query("SELECT * FROM `".$tblName."` WHERE `".$field."` = '".$value."'");

    $res_arr = array();
    $i = 0;

    $fields = $this->getFields($tblName);

    while ($row = $result_set->fetch_assoc()) {
    $temp_arr = array();

    for ($j = 0; $j < count($fields); $j++){
    $temp_arr[$fields[$j]] = $row[$fields[$j]];
    }

    $res_arr[$i] = $temp_arr;
    $i++;
    }
    return $res_arr;
    }

    function countRows($tblName, $fieldsAndValues){
    $q = "SELECT COUNT(*) FROM `".$tblName."` WHERE ";

    $counter = 0;
    foreach ($fieldsAndValues as $field => $value) {
    $q .= "`".$field."` = '".$value."'";
    $counter++;
    if ($counter != count($fieldsAndValues)) $q .= " AND ";
    }

    $result_set = $this->connection->query($q);

    while ($row = $result_set->fetch_assoc()) {
    return $row["COUNT(*)"];
    }
    }

    function countAllRows($tblName) {
    $result_set = $this->connection->query("SELECT COUNT(*) FROM `".$tblName."` WHERE 1");

    while ($row = $result_set->fetch_assoc()) {
    return $row["COUNT(*)"];
    }
    }

    function getListRows($tblName, $sort = true, $orderBy = "id", $fieldsAndValues = false, $limit = false, $offset = 0, $number = 0){
    if ($sort == true) $sort = "ASC";
    else $sort = "DESC";
    $q = $q = "SELECT * FROM `".$tblName."`";
    if ($fieldsAndValues != false) {
    $q .= " WHERE ";
    $counter = 0;
    foreach ($fieldsAndValues as $field => $value) {
    $q .= "`".$field."` = '".$value."'";
    $counter++;
    if ($counter != count($fieldsAndValues)) $q .= " AND ";
    }
    }
    $q .= " ORDER BY `".$orderBy."` ".$sort;
    if ($limit == true) $q .= " LIMIT ".$offset.",".$number;

    // echo $q;
    $result_set = $this->connection->query($q);

    $res_arr = array();
    $i = 0;

    $fields = $this->getFields($tblName);

    while ($row = $result_set->fetch_assoc()) {
    $temp_arr = array();

    for ($j = 0; $j < count($fields); $j++){
    $temp_arr[$fields[$j]] = $row[$fields[$j]];
    }

    $res_arr[$i] = $temp_arr;
    $i++;
    }

    return $res_arr;
    }

    function addRow($tblName, $values) {
    $fields = $this->getFields($tblName);
    $q = "INSERT INTO `".$tblName."` (";

    for ($i = 0; $i < count($fields); $i++){
    if ($i != (count($fields)-1)){
    $q .= "`".$fields[$i]."`, ";
    }
    else {
    $q .= "`".$fields[$i]."`)";
    }
    }

    $q .= " values(";

    for ($i = 0; $i < count($values); $i++){
    if ($i != (count($values)-1)){
    $q .= "'".$values[$i]."', ";
    }
    else {
    $q .= "'".$values[$i]."')";
    }
    }

    $this->connection->query($q);
    }

    function updateRow($tblName, $needed_field, $needed_value, $fieldsAndValues){
    $q = "UPDATE `".$tblName."` SET ";

    $counter = 0;
    foreach ($fieldsAndValues as $field => $value) {
    $q .= "`".$field."` = '".$value."'";
    $counter++;
    if ($counter != count($fieldsAndValues)) $q .= ", ";
    }
    $q .= " WHERE `".$needed_field."` = '".$needed_value."'";

    $this->connection->query($q);
    }

    function deleteRow($tblName, $field, $value){
    $this->connection->query("DELETE FROM `".$tblName."` WHERE `".$field."` = '".$value."'");
    }

    function getFieldSum($tblName, $field) {
    $q = "SELECT sum(`".$field."`) FROM `".$tblName."`";
    // echo $q;
    $result_set = $this->connection->query($q);
    while ($row = $result_set->fetch_assoc()) {
    return $row["sum(`".$field."`)"];
    }
    }
    }
    ?>
     
  7. USDC
    AlloY,
     
  8. renameduser_8798
    renameduser_8798 Jun 13, 2018 Banned 211 Feb 26, 2014
    Я бы тоже жаловался на код 2006 года (я о стиле и функциях)
     
  9. AlloY
    AlloY Topic starter Jun 13, 2018 Banned
    @scr.asia,
     
  10. AlloY
    AlloY Topic starter Jun 13, 2018 Banned
    ну извините, как-то так ))
     
  11. USDC
    AlloY, полный текст ошибки
     
  12. AloneStare
    AloneStare Jun 13, 2018 Banned 118 Jun 12, 2017
    Если жалуется на строку с циклом, то у тебя проблема в условии, а в частности или никогда не будет равно, или запрос во второй половине не валиден, тоесть всегда возвращает результат NULL
     
  13. AlloY
    AlloY Topic starter Jun 13, 2018 Banned
    @scr.asia, Fatal error: Call to a member function fetch_array() on boolean in public_html/php/classDB.php on line 33
    33 line - while ($row = $result_set->fetch_array()) {
     
  14. AlloY
    AlloY Topic starter Jun 13, 2018 Banned
    та я совсем тупенький в этом, учусь только )
     
  15. swmf
    swmf Jun 13, 2018 101 Dec 8, 2017
    AlloY, чел, я тебе сказал тоже самое, что и он, запрос не валиден, проверь его и исправь ошибки в нём
     
  16. USDC
    AlloY, значит при вызове в функцию неверно передается параметр $tblName - а конкретнее, такой таблицы в базе нет.
     
  17. USDC
    Запрос к базе посылается верный, этих людей выше слушать не надо.
     
  18. AlloY
    AlloY Topic starter Jun 13, 2018 Banned
     
  19. AloneStare
    AloneStare Jun 13, 2018 Banned 118 Jun 12, 2017
    Дядя, ты тут не профессионал, я бы посчитал что слушать тебя не надо, ошибка в точном месте, значит по какой - либо причине не могут появиться значения в цикле while, следовательно или запрос неверный, или ты пользовался ЧПУ ссылками, или нет такой таблицы.
     
  20. USDC
    Я и не позиционирую себя в данном ключе, в отличие от некоторых. Тебе бы так же не мешало это понять. Запрос к БД посылается верный, явную причину ошибки я указал выше. Отдохни.
     
Top
Loading...