[PHP/MySQL]Wel mysql, geen mysqli (maar zelfde gegevens)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Ik zit met een heel vreemd probleem. Bekijk deze code:
PHP:
1
2
3
4
5
6
7
$mysql_link = mysql_connect( $host, $username, $password );
var_dump( mysql_get_server_info( $mysql_link ) );
mysql_close( $mysql_link );

$mysqli_link = mysqli_connect( $host, $username, $password );
var_dump( $mysqli_link );
var_dump( mysqli_connect_errno() );

En deze uitkomst:
code:
1
2
3
string(15) "5.0.67-0ubuntu6"
object(mysqli)#9 (0) { }
int(0)
Ik heb hier geen idee waarom dit zo is:
  1. Ik kan met deze gegevens wel een connectie maken met de database (zie de uitkomst van de mysql_get_server_info). De host, username en password zijn dus correct.
  2. Ik heb ook mysqli werkend; te zien in phpinfo() en aan het mysqli-object. Met mysqli::init() krijg ik ook een object terug.
  3. Toch heb ik geen werkende connectie (object is leeg) maar de error zegt ook niets :?
Wat gaat er fout? Alles werkt, maar toch niet. Of zie ik iets over het hoofd?

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Moet je niet gewoon var_dump(mysqli_get_host_info( $mysqli_link )) doen? Wellicht is er helemaal niets aan het handje, heb je uberhaupt een triviale query geprobeerd?
Je had natuurlijk ook gewoon voorbeeld #2 van mysqli_connect in de manual erbij kunnen pakken en zodoende direct op de goede manier gedebugd hebben. ;)

[ Voor 38% gewijzigd door Voutloos op 20-10-2008 07:50 ]

{signature}


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Ik heb _geen_ idee hoe het komt, maar ik heb nu wel wat verbeteringen :p Om in te haken op je debug methoden: het php voorbeeld geeft mij alleen een lege string "Host information:" terug. Ik krijg er dus geheel geen informatie uit.

Mijn probleem was eerst dat ik op het object de query() methode bijvoorbeeld niet kom uitvoeren. Door raadselachtige veranderingen werkt dat nu wel. Er blijft nu nog een probleem over:
PHP:
1
2
echo $link->affected_rows(); //Fatal error: method op non-existing object
echo mysqli_affected_rows( $link ); //Geeft juist resultaat
Ik laat het ermaar even bij zitten. Vooralsnog werkt het weer. Bovenstaand moet namelijk geen verschil maken (de $link creëer ik ook OO). Maar goed, case closed so far. :)

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
mithras schreef op maandag 20 oktober 2008 @ 12:56:

Mijn probleem was eerst dat ik op het object de query() methode bijvoorbeeld niet kom uitvoeren. Door raadselachtige veranderingen werkt dat nu wel. Er blijft nu nog een probleem over:
PHP:
1
2
echo $link->affected_rows(); //Fatal error: method op non-existing object
echo mysqli_affected_rows( $link ); //Geeft juist resultaat
Er zijn 2 werkwijzen, maar die kun je niet door elkaar gebruiken. Zie de manual.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
pedorus schreef op maandag 20 oktober 2008 @ 13:11:
[...]

Er zijn 2 werkwijzen, maar die kun je niet door elkaar gebruiken. Zie de manual.
Nee, dat staat er niet:
Object oriented style (property):
code:
1
2
mysqli
  int $affected_rows;
Procedural style:
code:
1
int mysqli_affected_rows ( mysqli $link )
De $mysqli van het OO is een MySQLi object. De mysqli $link van de procedurele stijl moet ook een MySQLi object zijn. Ik heb nog even gezocht, maar nergens staat een warning dat het niet kan (hoewel dat niet altijd iets zegt, gezien de kwaliteit van de php documentatie op sommige punten...).
Het is niet een MySQL resource zoals bij mysql_*() functies, maar in beide gevallen een MySQLi object.

offtopic:
Maar ik maar ook mijn $link aan met OOP. Dit in tegenstelling tot het voorbeeld in de TS, die slechts ter illustratie van het probleem dient. Ik initialiseer wel een mysql object :)