[PHP] Rechtstreeks waarde uit array opvragen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • spone
  • Registratie: Mei 2002
  • Niet online
Wellicht een beetje vreemde titel, maar hopelijk wordt een en ander duidelijk uit deze post :)

Ik ben bezig met PDO icm prepared statements/parametrized queries, maar voor foutafhandeling loop ik een beetje vast en vraag ik me af of er een betere manier is. Ik wil de foutomschrijving ophalen, welke volgens de documentatie van PHP op te vragen is via PDOStatement::errorInfo(), index 2.

De relevante code die ik nu gebruik is:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$iq = "INSERT INTO x (name) VALUES (:name)";
$is = $dbh->prepare($iq);
$is->bindParam(':name',$name,PDO::PARAM_STR);
$is->execute();

if ($is->errorCode() == 0){
  // doe iets
}
else{
  $err = $is->errorInfo(); // <-- levert array op
  $err2 = $is->errorInfo()[2]; // levert syntax error op
  // meer code
}


Is er een manier om hetgene op regel 11 te doen zonder errorInfo in een object te moeten gooien, daaruit index 2 uit te gaan lezen en er vervolgens niks meer mee te doen?

edit: het betreft PHP 5.3

i5-14600K | 32GB DDR5-6000 | RTX 5070 - MacBook Pro M1 Pro 14" 16/512


Acties:
  • 0 Henk 'm!

  • Bv202
  • Registratie: Oktober 2006
  • Laatst online: 14-11-2021
Volgens mij was dit één van de nieuwe features van PHP 5.4 ;)

http://razvantudorica.wor...ing-support-in-php-5-4-0/

[ Voor 42% gewijzigd door Bv202 op 26-02-2012 22:04 ]


Acties:
  • 0 Henk 'm!

  • Keiichi
  • Registratie: Juni 2005
  • Laatst online: 19-09 22:32
Ik wil dit ook wel met grote regelmaat doen, maar helaas (zoals bv202 zegt, komt dit in 5.4)

In perl mag het al lang deze constructie ;)

Solar @ Dongen: http://solar.searchy.net/ - Penpal International: http://ppi.searchy.net/


Acties:
  • 0 Henk 'm!

  • spone
  • Registratie: Mei 2002
  • Niet online
Dus als ik het goed begrijp zit ik tot 5.4 vast aan een constructie als deze:
PHP:
1
2
3
$obj= $is->errorInfo();
$errTxt = $obj[2];
// meer code


Thanks, dan weet ik dat ik dat ook weer. Een zoekterm als 'array dereferencing' is niet iets wat meteen door mijn hoofd schoot toen ik googlede :)

i5-14600K | 32GB DDR5-6000 | RTX 5070 - MacBook Pro M1 Pro 14" 16/512


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Als he per sé een oneliner wil kun je natuurlijk ook gewoon een functie maken...

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!

Verwijderd

In de speciale gevallen dat je het eerste of het laatste element van een array wilt hebben kun je overigens dit doen:

PHP:
1
2
$first = reset(functie_die_een_array_returned());
$last = end(functie_die_een_array_returned());

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Het enige dat gedocumenteerd is echter is dat het om element 2 gaat. Je weet dus in theorie niet of element 2 het laatste element is....
PHP:
1
2
3
4
    $a = array();
    $a[1] = 1;
    $a[0] = 0;
    echo end($a);

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 19-09 11:00

Ventieldopje

I'm not your pal, mate!

pedorus schreef op zondag 26 februari 2012 @ 23:19:
Het enige dat gedocumenteerd is echter is dat het om element 2 gaat. Je weet dus in theorie niet of element 2 het laatste element is....

[...]
Dat is wel een om rekening mee te houden ja, een ksort() er voor zou het op moeten lossen maar dan kun je een oneliner wel vergeten ;)

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • steffex
  • Registratie: Augustus 2003
  • Laatst online: 12-08 00:24
dit is een micro-optimalisatie die in mijn ogen niet de moeite waard is om te maken.

En als je zit met het feit dat je nu een extra var hebt, kun je ook gewoon unset() gebruiken ;)

Acties:
  • 0 Henk 'm!

  • gertjuhh
  • Registratie: April 2004
  • Laatst online: 26-04 09:14
Kijk anders eens naar http://nl3.php.net/list

PHP:
1
list(,,$err) = $is->errorInfo();

Acties:
  • 0 Henk 'm!

  • Spockz
  • Registratie: Augustus 2003
  • Laatst online: 15-09 09:15

Spockz

Live and Let Live

@steffex, het is niet zozeer een micro-optimalisatie als wel gewoon een heel stuk fijner typen! Het cluttert daarnaast ook onnodig je code.

C'est le ton qui fait la musique. | Blog | @linkedin
R8 | 18-55 IS | 50mm 1.8 2 | 70-200 2.8 APO EX HSM | 85 1.8


Acties:
  • 0 Henk 'm!

  • borft
  • Registratie: Januari 2002
  • Laatst online: 15-09 16:33
een andere oplossing is natuurlijk gewoon exceptions gebruiken. dan zet je je code in een mooi try/catch blok, je vangt de PDOException en dan kan je gewoon $exception->getMessage() doen. Staat gelijk een stuk netter.

Acties:
  • 0 Henk 'm!

  • Spockz
  • Registratie: Augustus 2003
  • Laatst online: 15-09 09:15

Spockz

Live and Let Live

Als bovenstaande code zou werken dan zou het introduceren van een try/catch niets uitmaken. Bovenstaande kan alleen werken als de execute geen exception gooit. En als er geen exception gegooid wordt heeft de try-catch ook geen zin.

C'est le ton qui fait la musique. | Blog | @linkedin
R8 | 18-55 IS | 50mm 1.8 2 | 70-200 2.8 APO EX HSM | 85 1.8


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 13-07 01:14
Als het echt om error logging gaat kun je er natuurlijk ook voor kiezen om gewoon de hele array te loggen, bijv met een array_walk of wat voor functies je ook maar hebt om iets met alle elementen in een array te doen.
Pagina: 1