La domanda profonda qui è sapere quando PDO restituisce vero e quando falso.pdo restituisce true su più query anche se una di esse non riesce
La documentazione dice true se l'esito è corretto in caso di errore. Allora, cosa c'è successo e fallimento in MySQL?
Ecco la mia domanda attuale: sto trasmettendo questa query tutti insieme in un PDO esecuzione e restituisce vero anche foreign_id non dovrebbe essere NULL:
SET @id := NULL; SELECT id INTO @id FROM ? WHERE id = ? AND to_user = ?;
INSERT INTO hidden_notifications(table_name, foreign_id) VALUES (?, NULL);
ma se mando solo
INSERT INTO hidden_notifications(table_name, foreign_id) VALUES (?, NULL);
false è correttamente restituito.
N.B. NULL è solo per scopi di test normalmente è sostituito da @id.
ho cercato ulteriormente per vedere il comportamento della DOP:
INSERT INTO hidden_notifications(table_name, foreign_id) VALUES (?, ?);
INSERT INTO hidden_notifications(table_name, foreign_id) VALUES (?, NULL);
Ecco il primo inserto è corretta la seconda e la non DOP ritorna vero .. mi sto a pensare che PDO restituisce true quando solo una query riesce.
Potete spiegarmelo, quindi so una volta per tutte come gestire il mio database. perché ho basato tutto il mio programma su questo principio:
execute('BEGIN')
execute(myquery) // which can be many selections, insertions updates together in one string
if succed execute('COMMIT')
else execute('ROLLBACK')
Parto dal presupposto che, come qualsiasi altro adattatore di database PDO viene eseguito solo la prima istruzione. Il resto viene ignorato, quindi non genera un errore. In che altro modo dovrebbe funzionare il binding dei parametri? – arkascha
Utilizzare la libreria PDO per le transazioni http://php.net/manual/en/pdo.begintransaction.php – Mihai
@arkascha in realtà funziona, è possibile inviare più query e tutte vengono eseguite. ma pdo restituisce solo false se la prima query non riesce. –