Как изменить мой класс извлечения базы данных PHP для работы с MySQLi - PullRequest
0 голосов
/ 25 сентября 2018

Я получаю предупреждение о том, что

mysqli_num_rows () ожидает, что параметр 1 будет mysqli_result

Прошло много времени с тех пор, как я работал с PHP, что приводит менячтобы разобраться, почему функция size в классе MySQLReturn доставляет мне горе.Это старый класс, который я использовал несколько лет назад и как мог модифицировал для работы с php7 и MySQLi.

    <?php

class MySQL {

private $host;
private $dbUser;
private $dbPass;
private $dbName;
private $dbConn;
private $connectError;

public function __construct($host,$dbUser,$dbPass,$dbName) {
    $this->host=$host;
    $this->dbUser=$dbUser;
    $this->dbPass=$dbPass;
    $this->dbName=$dbName;
    $this->connectToDb();
}

public function __destruct() {
}

public function connectToDb () {
    // Make connection to MySQL server
    if (!$this->dbConn = mysqli_connect($this->host,$this->dbUser,$this->dbPass)) {
        trigger_error('Could not connect to server');
        $this->connectError=true;
    // Select database
    } else if (!mysqli_select_db($this->dbConn,$this->dbName)) {
        trigger_error('Could not select database');
        $this->connectError=true;
    }
}

public function isError () {
    if ($this->connectError)
        return true;
    $error=mysqli_error($this->dbConn);
    if (empty($error))
        return false;
    else
        return true;
}


public function query($sql) {
 if (!$queryResource=mysqli_query($this->dbConn,$sql)) trigger_error ('Query failed: '.mysqli_error($this->dbConn).' SQL: '.$sql);
        $result = new MySQLReturn($this,$queryResource);
        return $result;
}
}

class MySQLReturn {

private $mysql;

private $query;

public function MySQLResult($mysql,$query) {
    $this->mysql=$mysql;
    $this->query=$query;
}

public function fetch() {
    if ($row=mysqli_fetch_array($this->query,MYSQL_ASSOC) ) {
        return $row;
    } else if ( $this->size() > 0 ) {
        mysqli_data_seek($this->query,0);
        return false;
    } else {
        return false;
    }
}

public function size() {
    return mysqli_num_rows($this->query);
}

public function insertID() {
    return mysqli_insert_id($this->mysql->dbConn);
}

public function isError() {
    return $this->mysql->isError();
}
}
?>

Вот так я получаю доступ к функциям класса;

    <?php
$db = new MySQL($dbhost,$dbuser,$dbpass,$dbmain);
$authsql = $db->query("SELECT * FROM users WHERE email='".$uid."' AND password=MD5('".$pwd."')");

if ($authsql->size() >= '1') {
$logindtsql = $db->query("UPDATE users SET last_login=CURRENT_TIMESTAMP WHERE email='".$uid."' AND password=MD5('".$pwd."')");
$authsqlrow = $authsql->fetch();
extract($authsqlrow);
}

if ($authsql->size() == 0) {
   unset($_SESSION['uid']);
   unset($_SESSION['pwd']);
   session_destroy();
}
?>

Я не получаю размер запроса

1 Ответ

0 голосов
/ 27 сентября 2018

Изменено

public function MySQLResult($mysql,$query) {
    $this->mysql=$mysql;
    $this->query=$query;
}

на

public function __construct($mysql,$query) {
    $this->mysql=$mysql;
    $this->query=$query;
}

Работает как шарм

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...