Suchen
Inside Forum
Nützliche Links




 
phpforum.de bei Facebook
 
phpforum.de bei Twitter
 

Zurück   PHP Forum: phpforum.de > PHP > PHP

PHP Alles rund um PHP

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 14.05.2018, 08:43
rammi22 rammi22 ist offline
Engagierter Besucher
 
Registriert seit: 11.03.2011
Ort: Berlin, Deutschland
Beiträge: 839
Standard mysqli->error in prepared statement bleibt leer

Hallo,
mit folgenden Codeschnipsel versuche ich einen Fehler abzufangen:
PHP Quellcode:
...
$query = "INSERT INTO entry (content, author_id) VALUES (?,?)";
var_dump(
  $this->conn->prepare($query),
  $this->conn->error
);

if (!($stmt = $this->conn->prepare($query))) {
  echo "Prepare failed: (" . $this->conn->errno . ") " . $this->conn->error;
}
...

die Ausgabe
HTML Quellcode:
bool(false)
string(37) "Table 'guestbook.entry' doesn't exist"
Prepare failed: (0)

Die Tabelle gibt es tatsächlich nicht, aber wieso bleibt die error-Ausgabe leer im if()?
__________________
Gruss Rammi

Win 7 PRO || PostgreSQL 9.3.4, compiled by Visual C++ build 1600, 32-bit || XAMPP 1.8.1 || PHP: 5.4.7 || PSPad 4.5.7
Mit Zitat antworten
  #2  
Alt 14.05.2018, 10:23
hellbringer hellbringer ist offline
Forum-Mitarbeiter
 
Registriert seit: 27.03.2008
Beiträge: 31.050
Standard AW: mysqli->error in prepared statement bleibt leer

Es ist ganz schlechter Stil solche if-Abfragen (mit Zuweisung) zu schreiben. Sowas ist dann im Zweifel schlecht nachvollziehbar.

Davon abgesehen, warum drehst du nicht einfach das Error-Reporting von mysqli auf? Dann brauchst du gar keine ifs mehr.
Mit Zitat antworten
  #3  
Alt 14.05.2018, 10:30
rammi22 rammi22 ist offline
Engagierter Besucher
 
Registriert seit: 11.03.2011
Ort: Berlin, Deutschland
Beiträge: 839
Standard AW: mysqli->error in prepared statement bleibt leer

Entschuldigung, da fehlt noch eine Info...

vor dem Statement führe ich noch eine abhängige Abfrage durch, dabei nutze ich Transaction, also:

PHP Quellcode:
...
$return = null;
$query = "SELECT ID FROM author WHERE name = ?;";
...
$authorId = $result->fetch_assoc()['ID'];

$this->conn->autocommit(FALSE);

if (null === $authorId) {
  $query = "INSERT INTO author (name) VALUES (?);";
  ...
}

$query = "INSERT INTO entry (content, author_id) VALUES (?,?);";

try {
  if (!$stmt = $this->conn->prepare($query)) {
    throw new \Exception($this->conn->error); // <---- hier wird ein unbehandelter Fehler geworfen (weil error ist leer)
  }
  ...
} catch (\Expcetion $error) {
  $this->conn->rollback();
  $return = $error;
}

if (null !== $return) {
  return $return;
}
$this->conn->commit();
$this->conn->autocommit(TRUE);
...


Ausgabe
HTML Quellcode:
<br />
<b>Fatal error</b>: Uncaught exception 'Exception' in /xxx.php:64
Stack trace:
#0 ...
  thrown in <b>/xxx.php</b> on line <b>64</b><br />
__________________
Gruss Rammi

Win 7 PRO || PostgreSQL 9.3.4, compiled by Visual C++ build 1600, 32-bit || XAMPP 1.8.1 || PHP: 5.4.7 || PSPad 4.5.7
Mit Zitat antworten
  #4  
Alt 14.05.2018, 10:33
rammi22 rammi22 ist offline
Engagierter Besucher
 
Registriert seit: 11.03.2011
Ort: Berlin, Deutschland
Beiträge: 839
Standard AW: mysqli->error in prepared statement bleibt leer

Zitat:
Zitat von hellbringer Beitrag anzeigen
Es ist ganz schlechter Stil solche if-Abfragen (mit Zuweisung) zu schreiben. Sowas ist dann im Zweifel schlecht nachvollziehbar.
Es bleibt das gleiche im Ergebnis, wenn ich vorher die Variable befülle und dieses dann ans if() gebe..., übrigens wird das auf der Dokuseite auch so gemacht.
Zitat:
Zitat von hellbringer Beitrag anzeigen
Davon abgesehen, warum drehst du nicht einfach das Error-Reporting von mysqli auf? Dann brauchst du gar keine ifs mehr.
Das erklärt ja dennoch nicht, warum xxx->error leer ist
__________________
Gruss Rammi

Win 7 PRO || PostgreSQL 9.3.4, compiled by Visual C++ build 1600, 32-bit || XAMPP 1.8.1 || PHP: 5.4.7 || PSPad 4.5.7
Mit Zitat antworten
  #5  
Alt 14.05.2018, 10:38
hellbringer hellbringer ist offline
Forum-Mitarbeiter
 
Registriert seit: 27.03.2008
Beiträge: 31.050
Standard AW: mysqli->error in prepared statement bleibt leer

Zitat:
Zitat von rammi22 Beitrag anzeigen
HTML Quellcode:
<b>Fatal error</b>: Uncaught exception 'Exception' in /xxx.php:64
Stack trace:
#0 ...
  thrown in <b>/xxx.php</b> on line <b>64</b><br />
Und was steht in Zeile 64?

Zitat:
Zitat von rammi22 Beitrag anzeigen
Es bleibt das gleiche im Ergebnis, wenn ich vorher die Variable befülle und dieses dann ans if() gebe..., übrigens wird das auf der Dokuseite auch so gemacht.
Das erklärt ja dennoch nicht, warum xxx->error leer ist
In der PHP-Doku steht leider auch einiges an Mist drin und nicht alles muss so nachgemacht werden.

Expcetion ist übrigens was anders als Exception.

Es wäre übrigens hilfreicher du würdest testbaren statt verstümmelten Code posten.
Mit Zitat antworten
  #6  
Alt 14.05.2018, 10:40
rammi22 rammi22 ist offline
Engagierter Besucher
 
Registriert seit: 11.03.2011
Ort: Berlin, Deutschland
Beiträge: 839
Standard AW: mysqli->error in prepared statement bleibt leer

Zitat:
Zitat von hellbringer Beitrag anzeigen
Und was steht in Zeile 64?
PHP Quellcode:
...
    throw new \Exception($this->conn->error); // <---- hier wird ein unbehandelter Fehler geworfen (weil error ist leer)
...



Zitat:
Zitat von hellbringer Beitrag anzeigen
In der PHP-Doku steht leider auch einiges an Mist drin und nicht alles muss so nachgemacht werden.
OK
__________________
Gruss Rammi

Win 7 PRO || PostgreSQL 9.3.4, compiled by Visual C++ build 1600, 32-bit || XAMPP 1.8.1 || PHP: 5.4.7 || PSPad 4.5.7
Mit Zitat antworten
  #7  
Alt 14.05.2018, 10:44
rammi22 rammi22 ist offline
Engagierter Besucher
 
Registriert seit: 11.03.2011
Ort: Berlin, Deutschland
Beiträge: 839
Standard AW: mysqli->error in prepared statement bleibt leer

Zitat:
Zitat von hellbringer Beitrag anzeigen
Expcetion ist übrigens was anders als Exception
Jawoll, danke wieder mal an dich!
__________________
Gruss Rammi

Win 7 PRO || PostgreSQL 9.3.4, compiled by Visual C++ build 1600, 32-bit || XAMPP 1.8.1 || PHP: 5.4.7 || PSPad 4.5.7
Mit Zitat antworten


Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu
Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mysqli prepared statement? dark_overlord PHP 16 25.03.2013 15:08
mysqli-Klasse und prepared Statement Ministry PHP 2 12.04.2011 16:46
mysqli prepared statement crasht während bind_result Zaunkönig PHP 7 05.04.2011 15:48
MySQLi Prepared Statement funktioniert nicht storm7 Datenbanken 7 13.07.2010 22:40
MySQLi nutzt prepared Statement bei SELECT nicht richtig regsnerven PHP 10 24.03.2010 19:19


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:33 Uhr.


Powered by vBulletin® Version 3.8.8 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Powered by NuWiki v1.3 RC1 Copyright ©2006-2007, NuHit, LLC