Ik ben bezig mijn site over te zetten van PhP 5.6 naar PhP 7.3

Heb al veel gedaan maar loop tegen een probleem aan bij de volgende functie die ik ooit en keer op het internet gevonden heb. Functie is een rating manager (5 star rating). En ik heb geen idee hoe ik dit moet oplossen. Bestaat uit een stuk PhP en ene stuk AJAX (niet overgezet). Probleem zit in het PhP deel. Onderstaande code werk goed op PhP 5.6. Hulp wordt zeer gewaardeerd.

//mysql extention must be loaded
// Abstact class for rating
abstract class Database {
    public $databaseHost = DATABASEHOST;
    public $databaseUser = DATABASEUSERNAME;
    public $databasePassword = DATABASEPASSWORD;
    public $databaseName = DATABASENAME;
    public $connection = null; //  database connection
    protected $recordsSelected = 0;
    protected $recordsUpdated = 0;
    
    
    protected function connect() {
    
        $this->connection = new mysqli($this->databaseHost, $this->databaseUser, $this->databasePassword, $this->databaseName);
        if (!$this->connection) {
            $this->connection = null;
               trigger_error(mysql_error());
        }
//        mysql_select_db($this->databaseName);
    }
    
    protected function querySelect($query) {
        
        if (strlen(trim($query)) < 0 ) {
            trigger_error("Database encountered empty query string in querySelect function", E_USER_ERROR);
            return false;
        }
        
        if ($this->connection === null ) {
            $this->connect();
        }
        $result = $this->query($query, $this->connection) ;
        if (!$result) {
            return array();
        }
        $this->recordsSelected = mysql_num_rows($result);
        return $this->getData($result);
    }
    
    protected function queryExecute($query) {
        
        if (strlen(trim($query)) < 0 ) {
            trigger_error("Database encountered empty query string in queryExecute function", E_ERROR);
        }
        
        if ($this->connection === null ) {
            $this->connect();
        }
        
        $res = mysql_query($query, $this->connection);
        if($res) {
            $this->recordsUpdated = mysql_affected_rows($this->connection);
        }
    }
    
    protected function getData($result) {
        $data = array();
        $i = 0;
        while ($row = mysql_fetch_assoc($result)) {
            foreach ($row as $key => $value) {
                $data[$i][$key] = stripslashes($value);        
            }
            $i++;
        }
        return $data;
    }    
    
}
Waarom een mengelmoes tussen objectgeorienteerd en procedureel?
En hoezo steeds opnieuw connecten per method?
Deze routine heb ik jaren geleden op het internet gevonden toen ik een 5-star rating op mijn site wilde bouwen. En deze heb ik toen gevonden en die voldeed goed. Alleen nu wil ik om naar php 7.3 en dit is het enige script wat ik niet aan de praat krijg.

[size=xsmall]Toevoeging op 05/07/2019 22:35:47:[/size]

In gebruik verder niet van dit soort functies, vooral rechttoe rechtaan php.
Als je jouw code even opschoont van die gecommentariseerde functies, en netjes code tags en php-tags gebruikt, is het wat makkelijker om door te spitten.
Call to undefined method RatingManager::query()

Veel duidelijker dan dat wordt het niet. Je probeert een niet-bestaande methode aan te roepen.
Thomas van den Heuvel op 06/07/2019 12:17:27

Call to undefined method RatingManager::query()

Veel duidelijker dan dat wordt het niet. Je probeert een niet-bestaande methode aan te roepen.


Mooi,

Nu staat er dit: $result = $this->query($query)

En wat moet het dan zijn?


Hangt van de query af. Je hebt in principe twee smaken: SELECT queries, gebruik dan querySelect, en "execute" queries, ik veronderstel dat die bedoeld zijn voor INSERT-, UPDATE- en DELETE-queries. Maar waarschijlijk ligt je getData() methode nog in puin.

Reageren