- ベストアンサー
MySQLでinsertできない原因は?
- MySQLでのデータベースへのinsertがうまくいかない場合、文字コードの関係や記録された文字列の文字化けが考えられます。
- メールフォームを使ってメッセージを記録する際、名前やメールアドレスのカラムは正常に記録されるが、メッセージのみが記録されないことがあります。
- MySQLの文字コード設定が「utf8_general_ci」であるため、文字コードの関連問題が原因ではないかと考えられます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>こういった場合、何が原因と考えられるでしょうか? 何が原因かを考えるより、どうやって原因を特定するかが重要です。 何が原因かは、私はDBがどうとか文字コードの指定がどうとかの前に、そもそもメッセージが空なんじゃないかと思います…。が、そういう予想が正しいかどうかはさておき、私ならまずINSERT直前の「メッセージ」の内容を確認します。 ファイルに書き込むのが現実的でしょうか。それを確認すれば、DBとの接続で情報が失われるのかメッセージの内容に問題があるのか、そもそもメッセージが空なのか切り分け出来ます。
その他の回答 (2)
- y_suzuki-o
- ベストアンサー率14% (12/85)
phpのエラーログ、mysqlのエラーログに何か出ていたらそれが原因を特定する有効な情報になるかもしれませんので、一度見てみるのも手だと思います。
お礼
ご回答ありがとうございました。
補足
ワシが借りてるレンタルサーバーは、phpmyadminのバージョンが古すぎてログを出せないようなんですよ(^_^;
- Lchan0211b
- ベストアンサー率61% (573/930)
シングルクォーテーション文字のエスケープはしていますか? もしそれをしていないと、シングルクォーテーション文字を 含むメール本文のINSERTはエラーになります。 (参考) http://everyday-growth.com/?p=45 それだけじゃなくて、もしそういう作りをしていると SQLインジェクション攻撃でデータベースを盗み見されたり 操作されたりする可能性があります。 (参考) http://shoyu-ramen23.jugem.jp/?eid=144
お礼
ご回答ありがとうございました。
補足
エスケープという形ではなく、インジェクションを防ぐ目的でも、クエリの発行はqueryではなく、prepareを使っています。 だから、クォーテーションはシングルもダブルもそのまま記録されるようになってまして、試しに自分で書き込んでみましたが、クォーテーションが原因で空白にはならないことを確認しています。
お礼
仰る通りでした。 大変恥ずかしながら、フォームの送信完了ページを更新すると、再びinsertされるという欠陥がありました。 セッションで管理してたもんですから、送信完了後にクリアしたセッション変数、つまり中身が入っていないものをinsertしていた状態です。 書き直して、なんとか解決したようにみえます。 本当に初歩的でお恥ずかしい限りです(^_^; ご回答ありがとうございました。