0

重複の可能性:
PDO 準備済みステートメントから完全なクエリを取得 (またはシミュレート)
PHP で最後に実行されたクエリを取得 PDO
PDO デバッグ - バインド後にクエリを表示?

このPDOExceptionクラスを使用して、SQL エラーに関するさまざまな情報を取得できます。欠けている部分の 1 つは、エラーの原因となった実際の SQL クエリです。これは、整合性制約違反エラーのトラブルシューティングに役立ちます。パラメーターが挿入された完全なクエリが利用できない場合でも、完全なクエリを再作成できるため、準備されたクエリと渡された配列でexecute()十分です。私は現在 bindParam() を使用していませんが、execute().

エラーの原因となった実際のクエリを表示するにはどうすればよいですか? ありがとうございました

エラー:

SQLSTATE[23000]: 整合性制約違反: 1452 子行を追加または更新できません: 外部キー制約が失敗しました ( website/accounts, CONSTRAINT fk_accounts_zipcodes1FOREIGN KEY ( zipcodes_id) REFERENCES zipcodes( id) ON DELETE NO ACTION ON UPDATE NO ACTION)
ファイル名: /var/www/ main/components/com_upload/models/contacts.phpLine: 520
エラー発生時刻: 2012 年 10 月 15 日月曜日、7:11:49 PDT

エラーの原因となった SQL:

INSERT INTO アカウント (id、sites_id、name、address、cities_id、zipcodes_id、phone、fax、date_created、date_modified、record_status、vertical_markets_id、priority_id、roles_id) 値 (:id,123,:name,:address,:cities_id,:zipcodes_id) ,:電話,:ファックス,NOW(),NOW(), "アクティブ" ,:vertical_markets_id,:priority_id,:roles_id)

4

1 に答える 1

1

実際のクエリを確実に取得する最も簡単な方法は、mysqlログをアクティブにして、出力として得られるものを確認することです。

Windows ではmy.ini、ファイルに次の2行を追加することで実行できます。

general_log = 1
general_log_file = "C:\path\to\log\mysql.log"

Linuxではmy.cnf、ファイルを変更する必要があります。

general_log = 1
general_log_file = /path/to/log/mysql.log
于 2012-10-15T14:04:00.363 に答える