2016-06-15 9 views
0

Ich versuche, ein Problem nur auf einem Produktionssystem zu diagnostizieren und ich versuche, die Fehlerberichterstattung für Fehler von pg_convert() geworfen, aber nicht sicher wohin zu gehen . Ich habe versucht, den Code in der Entwickler-Umgebung zu ändern zu:PostgreSQL: Fehlermeldungen von `pg_convert()`

$converted_values = pg_convert($cnx, $table, $values); 
if ($converted_values === FALSE) 
    throw new Exception("Failed to insert record: '".pg_last_error($cnx)."' using values: ".var_export($values, true)); 

Aber pg_last_error() nichts zurückgegeben.

Hinweis: Ich habe das Obige getestet, indem ich versucht habe, einen Nullwert in eine NOT NULL Spalte einzufügen. Zusätzlich dazu, keine Freude von pg_last_error() zu bekommen, hatte das Log einige "PHP Notices" drin. Das Produktionsprotokoll hatte keine solchen Hinweise. Nur der leere Rückgabewert von pg_convert() :(

ich PostgreSQL 9.4.6 auf Debian 8.3 und PHP 5.6.22 läuft.

Antwort

1

Von dem, was ich sagen kann Wenn Sie versuchen, etwas zu erreichen, w/pg_convert() ist ein Bust. Es ist nicht sehr zuverlässig im Umgang mit verschiedenen Daten, und es ist inkonsistent über doppelte Anführungszeichen um Spaltennamen. Wenn Sieverwendenmöchten Sie wahrscheinlich zu vorbereiteten Anweisungen konvertieren. Was sie tun, ist sehr unterschiedlich, also müssen Sie möglicherweise grundlegende Änderungen an Ihrer Codebasis vornehmen, aber wir haben die Änderung vorgenommen und es scheint für uns zu funktionieren.

Edit: und ein solches Problem, dass pg_convert()/pg_query() schien w/dieser pg_execute() rollen zu können, nicht der Fall, ist leere Strings zu Integer-Spalten zugeordnet, in denen NOT NULL nicht gesetzt ist. Um dies zu beheben (zumindest vorerst) musste ich:

  • Schleife durch das Array weitergeleitet pg_execute()
  • Anruf pg_meta_data() wenn ich einen w/eine leere Zeichenfolge gefunden
  • bestimmen, ob die Zielspalte ist ein Ganzzahl (Vorsicht: Es gibt wahrscheinlich viele Möglichkeiten, wie der Typ für eine Integer-Spalte ausgedrückt werden kann), wenn Nullen überhaupt zulässig sind
  • Die leere Zeichenfolge w/null überschreiben.
0

eine NULL in eine NOT NULL-Spalte einfügen keinen Fehler in pg_convert auslösen. Fehler werden von Verbindungsproblemen, einer fehlenden Tabelle oder einer fehlenden Spalte oder Daten, die nicht von der PHP-Struktur in den Typ in der Datenbank konvertiert werden können (zB ein Wort in eine Zahl)

+0

Es hat für mich getan. 'pg_convert()' hat 'FALSE' zurückgegeben. Das Entfernen dieses einen Felds entfernte nicht nur die Hinweise über den Typ, der inkompatibel ist, sondern auch den Rückgabewert "FALSE". – Opux

Verwandte Themen