2011-12-29 28 views
14

Quando ho iniziato a imparare PHP errore, vorrei scrivere istruzioni di query simili a quella qui:PHP: versione moderna di "or die();" per la gestione di

mysql_query("SELECT * FROM `table`") or die(mysql_error()); 

Qual è il miglior modo attuale, per ottenere lo stesso effetto di quanto sopra?

A mio parere, nel mondo odierno con classi, funzioni e OOP generale, eseguire una serie di query in questo modo è molto inefficiente. Cosa dovremmo fare diversamente?

+0

Uhm, vuoi qualcosa di diverso da "o muori" o usa OOP del tutto? Se il primo, cambia titolo! se quest'ultimo, puoi iniziare da qualcosa come "basso" come mysqli o andare a un ORM completo come Doctrine e Propel passando attraverso PDO –

+0

Cerca nell'uso di PDO. È orientato agli oggetti e può essere configurato per generare eccezioni per la gestione degli errori (in realtà lo fa per impostazione predefinita) –

+0

eccezioni ....? –

risposta

19

Si dovrebbe usare PDO che genererà eccezioni che possono essere catturate - o se non vengono catturate uccideranno lo script come die().

$db = new \PDO(
    'mysql:dbname=database;host=localhost', 
    'root', 
    '', 
    array(
     \PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', 
     \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC, 
     \PDO::ATTR_ERRMODE   => \PDO::ERRMODE_EXCEPTION 
    ) 
); 

$db->query('SELECT INVALID FOO'); // Exception!!! 

this_never_gets_run(); 
+3

+1 per DOP! DOP è comunque molto più sicuro e utile. – Cyclone

+2

@Cyclone DOP non è intrinsecamente più sicuro. Se non stai usando istruzioni preparate non guadagni nulla passando a PDO. Non è DOP === sicuro. Dipende ancora da come costruisci le tue domande. – Gordon

+0

@Gordon, anche se puoi danneggiare la tua app con entrambi - Penso che potresti sottolineare che ci sono più modi per ferirti, ed è più facile ferirti, non usando PDO. – Xeoncross

Problemi correlati