Van mysql naar mysqli

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Theo Luwema

Theo Luwema

06/08/2016 08:03:44
Quote Anchor link
Beste leden.

Ik beheer een site waar een hondendatabase op draait,de software is al wat ouder.
Ik verander weleens kleine dingetjes,en leer steeds meer over PHP en mysql.
Helaas heeft mijn provider besloten om mijn huidige versie van PHP niet meer te ondersteunen.
Huidige versie is PHP 5.3,de provider gaat nu naar 5.6.
Hierdoor is mijn site een beetje aan het omvallen.

Ik heb nu de errrormeldingen aangezet en ben nu aan het zoeken naar fouten en probeer deze te herstellen.
Sommige zijn me wel gelukt,maar ik heb er nu eentje die ik wel lastig vind,misschien kunnen jullie mij een duwtje in de goeie richting geven?

Onderstaand is de ouwe query:
$query = "SELECT COUNT(ID) FROM dog";
$result = mysql_query($query) or die('Query failed: ' . mysql_error());
$total = mysql_result($result,0);

deze query telt het aantal honden in een bepaalde kolom (dog)

na wat zoek werk heb ik er in mysqli dit van gemaakt:

$query=mysqli_query($connect,"SELECT COUNT(ID) FROM dog");
$result=mysqli_fetch_assoc($query);

het probleem is dat ik niet kan vinden hoe ik de derde regel in mysqli moet maken?
$total = mysql_result($result,0);

op de eerste 2 regels krijg ik geen foutmelding.

Kan iemand mij een duwtje in de juiste richting geven?


Groetjes Theo
 
PHP hulp

PHP hulp

15/11/2024 22:41:19
 
Frank Nietbelangrijk

Frank Nietbelangrijk

06/08/2016 09:46:53
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
// om een iets makkelijkere kolomnaam te krijgen dan 'COUNT(ID)' gebruik ik 'AS total'.
$query = "SELECT COUNT(ID) AS total FROM dog";

// execute query en verkrijg een resultaat-set.
$result = mysqli_query($connect, $query) or die('Query failed: ' . mysqli_error($connect));    

// verkrijg het eerste record of rij (in dit voorbeeld is er maar één record met slechts één 'kolom')
$row = mysqli_fetch_assoc($result);

// nu kopiëren we de waarde van de array naar een gewone variabele. Dit is eigenlijk overbodig, je kunt ook $row['total'] blijven gebruiken.
$total = $row['total'];
?>
Gewijzigd op 06/08/2016 09:49:04 door Frank Nietbelangrijk
 
Theo Luwema

Theo Luwema

06/08/2016 10:45:54
Quote Anchor link
Dank je wel Frank!

Dit werkt,en doet wat het moet doen.
Nu kan ik vanavond verder puzzelen. :-)
Gewijzigd op 06/08/2016 10:47:26 door Theo Luwema
 
Theo Luwema

Theo Luwema

04/09/2016 08:10:37
Quote Anchor link
Ik ben nu een aantal avondjes bezig geweest en ik heb nu een aantal pagina's werkend met MySqli.

Meestal pas ik pagina aan en als er een foutcode optreedt kijk ik wat er mis is.
Nu heb ik een foutmelding die ik niet weg krijg......
Kan iemand mij nog eens een duwtje in de goede richting geven?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
class ShadowDog {
    var $id, $name;
}

class DogDAO {
  
   function DogDAO() {
   }

   function save($vo) {
     if ($vo->id == 0) {
       $this->insert($vo);
     } else {
       $this->update($vo);
     }
   }
  

    function getShadow($id) {
        $query = "SELECT name FROM dog WHERE id=$id";
        $result = mysqli_query($connect, $query) or die('Query failed: ' . mysqli_error($connect));
        $line = mysqli_fetch_object($result);
        $shadowVo = new ShadowDog();
        $shadowVo->id = $id;
        $shadowVo->name = $line->name;    
        return $shadowVo;
    }

   function get($id) {
    // cache not implemented -> needs array in SESSION! -> refresh necessary!
    /*global $dogArray;
       if (!empty($dogArray[$id])) {
        $dogVo = $dogArray[$id];
        return $dogVo;
    }*/
    $dogVo = $this->getFromDB($id);
     //$dogArray[$id] = $dogVo;
    return $dogVo;
   }

   function getFromDB($id) {
     #execute select statement
     #create new vo and call getFromResult
     #return vo
             $query = "SELECT * FROM dog WHERE id=$id";
            $result = mysqli_query($connect, $query) or die('Query failed: ' . mysqli_error($connect));
            $line = mysqli_fetch_object($result);
            $vo = new Dog();
            $vo->id = $line->id;
            $vo->regnr = $line->reg_nr;
            $vo->name = $line->name;
            $vo->racingname = $line->racing_name;
            $vo->nickname = $line->nickname;


Op de volgende regel :
$result = mysqli_query($connect, $query) or die('Query failed: ' . mysqli_error($connect));

krijg ik constant een foutmelding.

Notice: Undefined variable: connect in /home/vhosting/d/vhost0050361/domains/lutee.nl/htdocs/www/db/class-Dog.php on line 78

Warning: mysqli_query() expects parameter 1 to be mysqli, null given in /home/vhosting/d/vhost0050361/domains/lutee.nl/htdocs/www/db/class-Dog.php on line 78

Notice: Undefined variable: connect in /home/vhosting/d/vhost0050361/domains/lutee.nl/htdocs/www/db/class-Dog.php on line 78

Warning: mysqli_error() expects parameter 1 to be mysqli, null given in /home/vhosting/d/vhost0050361/domains/lutee.nl/htdocs/www/db/class-Dog.php on line 78
Query failed:


De originele code zag er zo uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
class ShadowDog {
    var $id, $name;
}

class DogDAO {
  
   function DogDAO() {
   }

   function save($vo) {
     if ($vo->id == 0) {
       $this->insert($vo);
     } else {
       $this->update($vo);
     }
   }
  

    function getShadow($id) {
        $query = "SELECT name FROM dog WHERE id=$id";
        $result = mysql_query($query) or die('Query failed: ' . mysql_error());
        $line = mysql_fetch_object($result);
        $shadowVo = new ShadowDog();
        $shadowVo->id = $id;
        $shadowVo->name = $line->name;    
        return $shadowVo;
    }

   function get($id) {
    // cache not implemented -> needs array in SESSION! -> refresh necessary!
    /*global $dogArray;
       if (!empty($dogArray[$id])) {
        $dogVo = $dogArray[$id];
        return $dogVo;
    }*/
    $dogVo = $this->getFromDB($id);
     //$dogArray[$id] = $dogVo;
    return $dogVo;
   }

   function getFromDB($id) {
     #execute select statement
     #create new vo and call getFromResult
     #return vo
             $query = "SELECT * FROM dog WHERE id=$id";
            $result = mysql_query($query) or die('Query failed: ' . mysql_error());
            $line = mysql_fetch_object($result);
            $vo = new Dog();
            $vo->id = $line->id;
            $vo->regnr = $line->reg_nr;
            $vo->name = $line->name;
            $vo->racingname = $line->racing_name;
            $vo->nickname = $line->nickname;
Gewijzigd op 04/09/2016 10:45:31 door Theo Luwema
 
- Ariën  -
Beheerder

- Ariën -

04/09/2016 08:45:46
Quote Anchor link
Kan je jouw code tussen code-tags plaatsen? Zie ook de Veelgestelde Vragen.

Verder is $connect niet beschikbaar in je functie, dus moet je deze meegeven in je class aanroep meegeven als argument. In de constructor sla je deze op als $connect = $this->connect. En die variabele kan je dan in je hele class gebruiken.

Maar als je toch classes gebruikt, waarom niet meteen de OO versie van MySQLi gebruiken?
Gewijzigd op 04/09/2016 09:11:05 door - Ariën -
 
Theo Luwema

Theo Luwema

04/09/2016 15:06:42
Quote Anchor link
- Ariën - op 04/09/2016 08:45:46:
Kan je jouw code tussen code-tags plaatsen? Zie ook de Veelgestelde Vragen.

Verder is $connect niet beschikbaar in je functie, dus moet je deze meegeven in je class aanroep meegeven als argument. In de constructor sla je deze op als $connect = $this->connect. En die variabele kan je dan in je hele class gebruiken.

Maar als je toch classes gebruikt, waarom niet meteen de OO versie van MySQLi gebruiken?



Dankje wel Ariën,

Het "probleem" is inderdaad dat de variabele connect niet aanwezig is.
Ik heb dit op de quick en dirty maner getest door de gehele connect regel in te voegen.
Dit is uiteraard niet zo'n mooie manier.

Ik begrijp niet helemaal jou verhaal hoe ik de variable kan aanroepen uit de class.
Kun je hier iets meer over zeggen?
 
- Ariën  -
Beheerder

- Ariën -

04/09/2016 15:57:24
Quote Anchor link
Hoe roep jij nu je class aan?
 
Theo Luwema

Theo Luwema

04/09/2016 16:50:47
Quote Anchor link
- Ariën - op 04/09/2016 15:57:24:
Hoe roep jij nu je class aan?

Als ik het wist zou ik het gelijk zeggen Ariën.
Probleem is dat deze software is geschreven door een vrouw uit oostenrijk,en ze heeft deze code vrijgegeven voor een ieder om te gebruiken.
Wel met de uitdrukkelijke mededeling dat ze geen support geeft.
Ikzelf probeer mij steeds meer te verdiepen in PHP en SQL.
Ik kan dus simpele PHP wel volgen,maar ik ben geen expert.
Ik merk wel dat als ik de SQLi omzet de rest van code goed overeind blijft.
Dat geeft dus hoop dat het gaat lukken.
 
- Ariën  -
Beheerder

- Ariën -

04/09/2016 16:59:04
Quote Anchor link
Ik zie dat de opbouw van de class ook behoorlijk verouderd is.


Maar ergens in je code roep je de class aan met:

$iets = new DogDAO();
Kan je dat vinden?
Gewijzigd op 04/09/2016 16:59:37 door - Ariën -
 
Theo Luwema

Theo Luwema

05/09/2016 07:15:56
Quote Anchor link
- Ariën - op 04/09/2016 16:59:04:
Ik zie dat de opbouw van de class ook behoorlijk verouderd is.


Maar ergens in je code roep je de class aan met:

$iets = new DogDAO();
Kan je dat vinden?


Op een andere pagina vond ik dit stukje code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
    include 'db/db_connect.php';
    include_once 'db/logic.php';
// array for month
$month_arr = array(1=>"JAN",2=>"FEB",3=>"MAR",4=>"APR",5=>"MAI",6=>"JUN",7=>"JUL",8=>"AUG",9=>"SEP",10=>"OCT",11=>"NOV",12=>"DEC");
// Get dog id from http parameter
$currId = (int)$_GET['id'];
if (!$currId)
    $currId=1;    
$generations = (int)$_GET['gens'];    
if (!$generations)
    $generations=4;
$dogDAO = new DogDAO();
$dog = $dogDAO->get($currId);
// if no record with this ID was found in the database
if (empty($dog->id)) {
?>


Hier staat ook de regel :
$dogDAO = new DogDAO();
Gewijzigd op 05/09/2016 07:18:31 door Theo Luwema
 
- Ariën  -
Beheerder

- Ariën -

05/09/2016 11:36:32
Quote Anchor link
Kijk, daar kunnen we meer mee.... :-)

Als ik naar je DogDAO class kijk is deze behoorlijk verouderd.
Zo mis ik de PHP5 constructor, en gebruik je nu nog de oude manier van PHP4, waarbij de naam van de method hetzelfde is als de class. In PHP 7 zal dit genegeerd worden, en wordt dit als een aparte method gezien, en dus zal je class de vaste waardes missen.

Ook mis ik de 'visibilities' in je class-structuur.

Als we even voortborduren op de nieuwe opbouw, dan kom ik op dit uit (met ingekorte code voor de overzichtelijkheid).

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
class DogDAO { //Rare naam, het zegt niet wat de class doet.
  
   function __construct($connection) {
    $this->connection = $connection;
   }


   public function save($vo) {
     /*  .....  */
   }
  

    public function getShadow($id) {
        $query = "SELECT name FROM dog WHERE id=$id";
        $result = mysqli_query($this->connection, $query) or die('Query failed: ' . mysqli_error($$this->connection));
        $line = mysqli_fetch_object($result);
        $shadowVo = new ShadowDog();
        $shadowVo->id = $id;
        $shadowVo->name = $line->name;    
        return $shadowVo;
    }


   public function get($id) {
    /* .... */
   }

   public function getFromDB($id) {
        /* .... */
   }
}

?>


En de aanroep:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$dogDAO = new DogDAO($connection);


Nog fraaier is om de OO versie van MySQLi erin te integreren. Dan kan je foutmeldingen in een exception afvangen, en die netjes verwerken.

Ik raad je aan om even deze tutorial aandachtig te lezen:
http://www.phptuts.nl/view/45/'. Het is misschien best complex, maar met wat doorzettingsvermogen kan je hier een prima class mee opbouwen, die aan de huidige eisen moet voldoen.
Gewijzigd op 05/09/2016 17:21:25 door - Ariën -
 
Ozzie PHP

Ozzie PHP

05/09/2016 12:04:08
Quote Anchor link
@Aar

Wel zo netjes om dan even $connection als property in te stellen ... ;)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class DogDAO { //Rare naam, het zegt niet wat de class doet.
  
  private $connection;

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


   // enzovoorts

?>
 
- Ariën  -
Beheerder

- Ariën -

05/09/2016 12:20:10
Quote Anchor link
Juist'em dat was ik nog even vergeten.
 
Ben van Velzen

Ben van Velzen

05/09/2016 17:18:58
Quote Anchor link
En om natuurlijk de correcte veriabelen te gebruiken... ;)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
public function getShadow($id) {
        $query = "SELECT name FROM dog WHERE id=$id";
        $result = mysqli_query($this->connection, $query) or die('Query failed: ' . mysqli_error($this->connection));
        $line = mysqli_fetch_object($result);
        $shadowVo = new ShadowDog();
        $shadowVo->id = $id;
        $shadowVo->name = $line->name;    
        return $shadowVo;
    }

?>
 
- Ariën  -
Beheerder

- Ariën -

05/09/2016 17:33:14
Quote Anchor link
Uiteraard! :-)
 
Ozzie PHP

Ozzie PHP

05/09/2016 17:53:10
Quote Anchor link
>> En om natuurlijk de correcte veriabelen te gebruiken... ;)

Veriabelen? Wa's dè vur 'n diejalèkt :-)
 
Ben van Velzen

Ben van Velzen

05/09/2016 18:16:10
Quote Anchor link
Da's Drentsch, uiteraard!
Of Stadjeders, mag van mij ook. Als Assenaar kies ik voor de eerste :)
Gewijzigd op 05/09/2016 18:16:46 door Ben van Velzen
 
Ozzie PHP

Ozzie PHP

05/09/2016 20:59:03
Quote Anchor link
Hehe, oké dan ;-)
 
Theo Luwema

Theo Luwema

06/09/2016 14:51:47
Quote Anchor link
Bedankt voor de duwtjes in de goede richting.
Ik zal de tutorial eens aandachtig bestuderen.
 
Theo Luwema

Theo Luwema

20/01/2017 14:24:23
Quote Anchor link
Ik ben nu al een tijdje aan het stoeien met het omzetten naar PHP 5.6.
Maar het is voor mij toch lastiger als ik dacht.......
Zijn er mensen op dit forum die dit graag als hobby doen?
Ik ben ben wel bereid een vergoeding te betalen,maar ik kan niet veel vergoeden omdat het een
Vrijwilligerssite is.
 
- Ariën  -
Beheerder

- Ariën -

20/01/2017 14:49:52
Quote Anchor link
We kunnen ook via het forum helpen, maar als je het wilt laten doen door iemand anders dan ben je vrij om een vacature in het Vacatureforum te plaatsen.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.