2016-06-15 18 views
0

プロダクションシステムでしか見つからない問題を診断しようとしていますが、pg_convert()によって投げられたエラーのエラー報告を改善しようとしていますが、 。 dev環境でコードを変更してみました:PostgreSQL: `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)); 

しかし、pg_last_error()は何も返されません。

注:NOT NULLの列にnull値を挿入することによって、上記をテストしました。 pg_last_error()からの喜びを得ることに加えて、ログにはいくつかの「PHP通知」があります。プロダクションログにそのような通知はありませんでした。 pg_convert()からわずか空の戻り値:(

私はpg_convertでエラーをトリガしませんNOT NULLカラムにNULLを挿入するのDebian 8.3とPHP 5.6.22。

答えて

1

私が知る限り、何かを得ることを試みる/ pg_convert()バストです。それは非常に信頼性の高い異なるデータを扱うと、二重引用符を置くことについては一貫していません列名を使用している場合pg_convert()あなたはおそらく準備されたステートメントに変換したいと思うでしょう。彼らがすることは非常に異なっているので、コードベースを根本的に変更しなければならないかもしれませんが、私たちは変更を加えてくれているようです。

編集:とpg_convert()/pg_query()で/そのpg_execute() wをロールすることができるように見えたことがそのような問題は、NOT NULLが設定されていない列を整数に割り当てられた空の文字列でありません。 I宛先列がある場合、空の文字列

  • /wの一方が決定見つけたときpg_execute()
  • コールpg_meta_data()に渡さアレイを通して

    • ループ(少なくとも今のところ)この問題を解決するために私がしていました整数(注意してください:整数列の型を表現する方法は多分あります)、次にNULLが許可されている場合は
    • は空の文字列を上書きします。
  • 0

    でPostgreSQL 9.4.6を実行していますよ。エラーは、接続の問題、テーブルの欠落、カラムの欠落、またはPHP構造体からデータベースの型に変換できないデータ(ワードから数値など)によって発生します。

    +0

    それは私のためでした。 'pg_convert()'は 'FALSE'を返しました。その1つのフィールドを取り除くだけでなく、互換性のない型に関する通知だけでなく、 'FALSE'の戻り値も削除されました。 – Opux

    関連する問題