[PHP] goed opgelost bij error MySQL?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Ik heb een stuk code geschreven waarbij, als de DB leeg is of niks aan de query voorwaarden voldoet er een error verschijnt.

Ten eerste: kan dat voorkomen worden dat ie op de twee criteria
1: lege DB
2: niks voldoet aan query voorwaarden

een error geeft?

En zo niet:

is dit een nette oplossing daarvoor?:

code:
1
2
3
4
    $items = mysql_query ("SELECT * FROM nieuws WHERE year=$i AND active!='no' AND status!='deleted' ORDER BY id, subid");
    
    if($items)
    while ($fetch_items = mysql_fetch_array($items)) { etc etc


even voor de duidelijkheid: ik vang hem af met if($items)

Vind het zelf niet zo netjes, maar weet niks anders en gooi wanneer het script af is wel een or die() erachter hoor. Maar dat heeft hier denk ik niks mee te maken?

[ Voor 16% gewijzigd door Zoolander op 13-05-2004 19:34 ]

mijn naam slaat nergens op, althans niet op mij :P


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Je moet sowieso checken op errors van mysql:
PHP:
1
2
$sql="select bla";
$result=mysql_query($sql) or trigger_error(mysql_error(), E_USER_ERROR);

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ehm, hoe je het afvangt en wat je afvangt is best wel behoorlijk afhankelijk van wat voor site je hebt... En verder kijk ik liever naar het aantal records in de resultset dan dat ik if ($resultset) gebruik. $resultset is sowieso geen boolean variabele, dus zou ik hem ook nooit zo gebruiken.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 15-09 18:24

dusty

Celebrate Life!

Als er niets aan voldoet of je database is leeg is in principe dezelfde resultaat. Je krijgt niets terug.

Dus als je items leeg is kan je een foutmelding geven.

Daarnaast gebruik jij een varchar veld voor active ( dat is volgens mij altijd een ja / nee.. of misschien een onbekend, dan zou dat veld op zijn minst een getal moeten zijn en niet karakters.

Hetzelfde geldt voor status. Een database is stukken sneller met getallen dan met letters.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
oke, ik begrijp dat mijn oplossing dus niet netjes is.
En ik vind checken op errors altijd oke en dat bouw ik ook zeker in wanner alle code ruwweg is geschreven.

Maar hoe kan ik nu oplossen op een nette manier dat wanneer er GEEN data terug komt maar er geen echte error is hij het niet ziet als een error maar meer als een status en ik gewoon een boodschap kan laten verschijnen: geen records en dat het script dan gewoon doorgaat?

[ Voor 1% gewijzigd door Zoolander op 13-05-2004 19:46 . Reden: tikfoutje :) ]

mijn naam slaat nergens op, althans niet op mij :P


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?PHP
$sql="select bla"; 
$result=mysql_query($sql) or trigger_error(mysql_error(), E_USER_ERROR);

$totalrows=mysql_num_rows($result);

if($totalrows==0){
  trigger_error('Geen records gevonden.', E_USER_NOTICE);
}else{
  while($row=mysql_fetch_assoc($result)){
    print_r($row);
  }
}
?> 

[ Voor 7% gewijzigd door djluc op 13-05-2004 20:45 ]


Acties:
  • 0 Henk 'm!

  • yiko
  • Registratie: September 2003
  • Laatst online: 20-04 20:19
offtopic:
en nu op de goeie knop duwen :)



mysql_query() geeft de volgende resultaten terug:
bij een fout : altijd false

bij een successvolle selectie query : een mysqlresource , die je dan kan checken met mysql_num_rows()
bij een successvolle update/insert/delete query : true

Daarmee weet je genoeg om te kunnen achterhalen in welke situatie je zit.
En met de fout onderdrukking (@), onderdruk je dus de fouten, en moet je enkel het resultaat controleren.
Pagina: 1