Kluczową kwestią jest tutaj wiedzieć, kiedy PDO zwraca wartość true, a kiedy false.pdo zwraca wartość true dla wielu zapytań, nawet jeśli jedna z nich nie powiedzie się.
Dokumentacja mówi "prawda", jeśli pomyślnie "fałsz" po niepowodzeniu. Co więc oznacza sukces i porażkę w MySQL?
Oto mój obecny pytanie: Mam wysłaniu zapytania wszystko razem w jednym PDO wykonania i zwraca true nawet foreign_id nie powinny być NULL:
SET @id := NULL; SELECT id INTO @id FROM ? WHERE id = ? AND to_user = ?;
INSERT INTO hidden_notifications(table_name, foreign_id) VALUES (?, NULL);
ale jeśli mam wysłać tylko
INSERT INTO hidden_notifications(table_name, foreign_id) VALUES (?, NULL);
false jest poprawnie zwracane.
N.B. NULL służy wyłącznie do celów testowych, zwykle jest zastępowane przez @id.
próbowałem dalej, aby zobaczyć zachowanie PDO:
INSERT INTO hidden_notifications(table_name, foreign_id) VALUES (?, ?);
INSERT INTO hidden_notifications(table_name, foreign_id) VALUES (?, NULL);
Oto pierwsza wkładka jest prawidłowa, nie drugi i PDO zwraca true .. Dostaję myśleć, że PDO zwraca true gdy tylko jedno zapytanie się uda.
Czy możesz mi to wyjaśnić, więc raz wiem, jak sobie poradzić z moją bazą danych. bo cały mój program oparty na tej zasadzie:
execute('BEGIN')
execute(myquery) // which can be many selections, insertions updates together in one string
if succed execute('COMMIT')
else execute('ROLLBACK')
Przypuszczam, że podobnie jak każdego innego adaptera bazy danych PDO wykonuje tylko pierwsze oświadczenie. Reszta jest ignorowana, więc nie powoduje błędu. Jak inaczej powinno działać powiązanie parametru? – arkascha
Używanie biblioteki PDO do transakcji http://php.net/manual/en/pdo.begintransaction.php – Mihai
@arkascha faktycznie działa, możemy wysyłać wiele zapytań i wszystkie są wykonywane. ale pdo zwraca tylko false, jeśli pierwsze zapytanie się nie powiedzie. –