[PHP] Wat doet een @ voor een functie

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • SandaX
  • Registratie: November 2003
  • Nu online

SandaX

Nicht Ärgern nur wundern

Topicstarter
Ik ben bezig met een scriptje dat images automatisch verkleind weergeeft dmv de functie
PHP:
1
getimagesize()
Voor lokale images ging het perfect maar met images op andere servers was het hopeloos. Deze gaven foutmeldingen en na wat gelezen te hebben over deze functie zonk me de moed bijna in de schoenen, om dit werkend te krijgen bleek nogal een opgave (voor een persoon dat wel om kan gaan met php maar er zeker geen ster in is)

Nu zag ik op een site een scriptje dat voor deze functie een "@" plaatste. Dit heb ik toen ook geprobeerd, met als resultaat dat de grootte (reso) van de image wél ingelezen werd óók van remote files.

Nu vraag ik me dus af wat dit @ eigenlijk doet dat de functie het nu wel doet.

Acties:
  • 0 Henk 'm!

  • TheovdS
  • Registratie: Oktober 2004
  • Laatst online: 16-01 02:24
Als er een foutmelding zou komen, dan laat hij de foutmelding niet zien.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

Even in de manual kijken bij de operators reference. ;)

Overigens moet je die operator niet te pas en te onpas gaan gebruiken. Fouten moet je voorkomen, niet negeren. :)

[ Voor 24% gewijzigd door NMe op 04-04-2006 13:58 ]

'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!

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 09-06 06:07

JHS

Splitting the thaum.

DM!


Acties:
  • 0 Henk 'm!

  • ZroBioNe
  • Registratie: Augustus 2001
  • Niet online
Ik gebruik de @ altijd om te kijken of ik results heb van een MySQL query..
Dus zo:
PHP:
1
2
3
4
5
$sql = "SELECT id FROM users";
$res = mysql_query($sql);
if (@mysql_num_rows($res) > 0) {
  $rec = mysql_fetch_assoc($res);
}

Denk dat dit wel nette manier is om de @ te gebruiken, als je hem hier niet gebuirkt krijg je een fout melding dat je geen valid sql result resource supplied, maar dat moet je toch checken :)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

Als je geen records terug krijgt, dan krijg je nog steeds een valid (doch lege) resultset hoor, en returnt mysql_num_rows gewoon 0. Zolang jij een geldige query verzint krijg je altijd een goede resultset, en dus is de @ totaal overbodig bij die functie. Dan zou ik hem eerder bij mysql_query zetten, als deze tenminste gebaseerd is op user input. Maar ook daar is ie overbodig, want jij moet gewoon zorgen dat die query klopt. ;)

'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!

Anoniem: 53459

ZroBioNe: normaal geeft het gewoon een empty recourse. Je krijgt maar false (en dan "not a valid mysql recourse") als er een fout gebeurt bij het afhandelen van de query (syntax error bvb). Ik gebruik @ eigenlijk nooit. Liever dat iets hard faalt dan dat je x tijd later te weten komt dat er een fout zit in je code.

Acties:
  • 0 Henk 'm!

  • sTeVuu
  • Registratie: Oktober 2005
  • Laatst online: 08-08-2023
ZroBioNe schreef op dinsdag 04 april 2006 @ 14:14:
Ik gebruik de @ altijd om te kijken of ik results heb van een MySQL query..
Dus zo:
PHP:
1
2
3
4
5
$sql = "SELECT id FROM users";
$res = mysql_query($sql);
if (@mysql_num_rows($res) > 0) {
  $rec = mysql_fetch_assoc($res);
}

Denk dat dit wel nette manier is om de @ te gebruiken, als je hem hier niet gebuirkt krijg je een fout melding dat je geen valid sql result resource supplied, maar dat moet je toch checken :)
Gezien PHP 'lazy' is met if-constructies, kun je if (is_resource($res) && mysql_num_rows($res) > 0) gebruiken, als de eerste clausule FALSE is, zal de tweede niet eens geëvalueerd worden, en dus ook geen foutmelding genereren. (In deze situatie redelijk overbodig zoals -NMe- al zei, maar goed.)

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

-NMe- schreef op dinsdag 04 april 2006 @ 14:17:
Zolang jij een geldige query verzint krijg je altijd een goede resultset, en dus is de @ totaal overbodig bij die functie.
En als je database stuk is? ;)

Het komt er op neer dat zowel mysql_query als mysql_num_rows een foutmelding kunnen (en zullen?) geven bij connectieproblemen en andere "overmacht". Die fouten gelijk maar domweg verbergen is natuurlijk niet zo goed, want je kan ze ook gewoon voorkomen; mysql_connect geeft false als resultaat als het misloopt en dus hoor je dan niet eens meer te proberen mysql_query uit te voeren. mysql_query geeft false terug als het misloopt, en dus moet je dan geen mysql_num_rows/mysql_fetch_* uitvoeren.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

Wat dus precies mijn punt was: niet bij die specifieke functies dingen gaan onderdrukken die je al veel eerder had kunnen voorkomen. ;)

'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.

Pagina: 1