[PHP][MySQL] Warning: mysql_fetch_array()

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Raem
  • Registratie: Oktober 2005
  • Laatst online: 14:44
Ik heb een raar probleem. Ik heb een PHP bestand met daarin een SQL query, maar ik krijg af en toe de volgende error:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource.

Nu weet ik dat deze error optreedt wanneer de output van de query leeg is? Het vreemde is, is dat bij mij niet het geval is. Heb de query getest in phpmyadmin en krijg gewoon output. Vreemde is ook dat ik de error niet altijd krijg, maar random. En als ik de error krijg en een aantal keer refresh gaat hij weer weg. Refresh ik weer een aantal keer, dan komt hij weer terug.

Query ziet er als volgt uit:

code:
1
2
3
$query = "SELECT * FROM kaart INNER JOIN gebouwen ON kaart.gebouw_id = gebouwen.gebouw_id";
$result = mysql_query($query);
$kaart = mysql_fetch_array($result);


Ik test het localhost en heb xampp 1.6.8 draaien. Heb al een re-install geprobeerd, maar heeft niet geholpen. Iemand enig idee?

https://psnprofiles.com/RaemNL


Acties:
  • 0 Henk 'm!

  • StephanVierkant
  • Registratie: Mei 2003
  • Laatst online: 08-09 16:22
Ik ben geen held in SQL, maar volgens mij mist er een 'GROUP BY' en kun je niet 'SELECT *' gebruiken bij een JOIN.

Acties:
  • 0 Henk 'm!

  • Raem
  • Registratie: Oktober 2005
  • Laatst online: 14:44
Het ligt niet aan de SQL. Heb hem even aangepast naar iets heel simpels 'SELECT * FROM gebouwen' en dan krijg ik hetzelfde probleem.

De ene keer krijg ik geen error met gewoon output uit de database op het scherm. En de andere keer (of na een aantal keer refresh) krijg ik wel een error met geen output.

Heb zelf het idee dat het aan xampp ofzo ligt, maar een re-install heeft dus niet geholpen en zou niet weten wat ik anders zou moeten aanpassen in de configuratie.

https://psnprofiles.com/RaemNL


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Gewoon vooraan beginnen; gaat de connectie met de DB goed etc. etc. Kwestie van debuggen en de resultaten van je acties controleren. Zie Debuggen: Hoe doe ik dat?
Raem schreef op maandag 24 november 2008 @ 14:29:
De ene keer krijg ik geen error met gewoon output uit de database op het scherm. En de andere keer (of na een aantal keer refresh) krijg ik wel een error met geen output.
Geef je ook alle resources weer vrij e.d.?
Stephan4kant schreef op maandag 24 november 2008 @ 14:23:
Ik ben geen held in SQL, maar volgens mij mist er een 'GROUP BY' en kun je niet 'SELECT *' gebruiken bij een JOIN.
Waarom zou er dan volgens jou een GROUP BY bij moeten en waarom zou je geen select * kunnen doen als je een join gebruikt? Gewoon even nieuwsgierig naar je redenatie, want beide is onwaar ;)

Zie ook:
Hoe werkt dat GROUP BY nu eigenlijk? en Hoe werken joins?

[ Voor 102% gewijzigd door RobIII op 24-11-2008 14:36 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • dik_voormekaar
  • Registratie: April 2003
  • Laatst online: 15-09 21:32
Doe maar eens :

code:
1
if ($result==0) echo "Error=".mysql_error()."<br>";

Acties:
  • 0 Henk 'm!

  • Solopher
  • Registratie: December 2002
  • Laatst online: 11-09 14:55
Voordat je mysql_fetch_array doet je kun je misschien eens echo mysql_error(); neerzetten, dan krijg je meestal wel een duidelijk beeld wat er mis is.

Acties:
  • 0 Henk 'm!

  • Raem
  • Registratie: Oktober 2005
  • Laatst online: 14:44
Hij geeft aan dat er geen database geselecteerd is.

Heb bovenin m'n PHP bestand staan:
code:
1
<?php require_once('Connections/biofarm.php'); ?>


In dat bestand staat:

code:
1
2
3
4
5
$hostname_biofarm = "localhost";
$database_biofarm = "biofarm";
$username_biofarm = "admin";
$password_biofarm = "pass";
$biofarm = mysql_pconnect($hostname_biofarm, $username_biofarm, $password_biofarm) or trigger_error(mysql_error(),E_USER_ERROR);


Databasename, username, password enzo kloppen allemaal. Ik vind het gewoon vreemd dat ik de error de ene keer wel krijg en de andere keer weer niet. :S

https://psnprofiles.com/RaemNL


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
En waar gebruik je $database_biofarm dan? ;) Kijk eens naar mysql_select_db ;)
Raem schreef op maandag 24 november 2008 @ 14:48:
Ik vind het gewoon vreemd dat ik de error de ene keer wel krijg en de andere keer weer niet. :S
Again: debuggen, mysql_error() gebruiken en resources opruimen als je er (definitief) mee klaar bent (pconnect is toch persistent connect, niet? Ben niet zo into php :P Ik neem aan dat je die ook moet closen of iig checken voordat je er een nieuwe actie op los laat voor het geval MySQL gebokt heeft)

[ Voor 109% gewijzigd door RobIII op 24-11-2008 14:55 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • JJerome
  • Registratie: Oktober 2007
  • Laatst online: 27-07 15:33
Misschien zit je MySQL server te hikken?

Acties:
  • 0 Henk 'm!

  • Raem
  • Registratie: Oktober 2005
  • Laatst online: 14:44
Probleem lijkt opgelost. Heb de database connectie aangepast en tot nu toe geen errors meer gehad. :)

https://psnprofiles.com/RaemNL


Acties:
  • 0 Henk 'm!

  • !null
  • Registratie: Maart 2008
  • Laatst online: 20-09 20:32
Gewoon een mysql_select_db(), vergeten dus?

Ampera-e (60kWh) -> (66kWh)


Acties:
  • 0 Henk 'm!

Verwijderd

RobIII schreef op maandag 24 november 2008 @ 14:33:
Waarom zou er dan volgens jou een GROUP BY bij moeten en waarom zou je geen select * kunnen doen als je een join gebruikt? Gewoon even nieuwsgierig naar je redenatie, want beide is onwaar ;)
GROUP BY is hier idd niet nodig, maar een SELECT * kan bij deze tabellen echt niet: dit slikt SQL alleen wanneer alle kolomnamen uniek zijn, en op z'n minst 1 kolomnaam komt 2x voor (zie de ON clause van de join).

Edit: Blijkbaar pikt MySQL 't wel, maar 't blijft invalid SQL. Bij ongeveer alle andere RDBMS zul je alleen een foutmelding terugkrijgen ("ambiguous column name" o.i.d.).

[ Voor 14% gewijzigd door Verwijderd op 24-11-2008 20:53 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op maandag 24 november 2008 @ 20:48:
[...]
Edit: Blijkbaar pikt MySQL 't wel, maar 't blijft invalid SQL. Bij ongeveer alle andere RDBMS zul je alleen een foutmelding terugkrijgen ("ambiguous column name" o.i.d.).
Ik heb 't niet getest, maar AFAIK vreet MSSQL het ook en ik zou niet zien waarom niet. Moet je maar een alias gebruiken en ze anders gewoon op index benaderen :P

Edit: En MSSQL vreet 't dus ook gewoon:

SQL:
1
2
3
select * from a
select * from b
select * from a inner join b on a.id = b.id


Output:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
id          name                                               
----------- -------------------------------------------------- 
1           A
2           B
3           C

id          name                                               
----------- -------------------------------------------------- 
1           QQQ
2           XXX

id          name                                               id          name                                               
----------- -------------------------------------------------- ----------- -------------------------------------------------- 
1           A                                                  1           QQQ
2           B                                                  2           XXX

Daar is, ik heb de spec er niet bij, volgens mij niets invalids aan.

Dia ambiguous columname krijg je uiteraard wél als je bijv. een where clause (of whatever) los laat op een field in de query waarbij SQL niet kan bepalen of je het field uit A of B bedoelt; ambiguous betekent dan ook dat 't field dat je specificeert meer dan 1 betekenis kan hebben; je zult met fully qualified names moeten aangeven wat je bedoelt, zoals ik in het eerste voorbeeld doe.

Dit werkt dus niet:
SQL:
1
2
3
4
select *
from a
inner join b on a.id = b.id
where id = 3

Omdat de where clause een id specificeert, maar niet welke (die uit A of uit B ). En voor de duidelijkheid: dat geldt dus niet alleen voor where-clauses maar overal waar je een field specificeert. Logisch.

Stom hoe je soms aan jezelf gaat twijfelen :P

[ Voor 70% gewijzigd door RobIII op 24-11-2008 21:28 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1