• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MySQLでinsertできない原因は?)

MySQLでinsertできない原因は?

このQ&Aのポイント
  • MySQLでのデータベースへのinsertがうまくいかない場合、文字コードの関係や記録された文字列の文字化けが考えられます。
  • メールフォームを使ってメッセージを記録する際、名前やメールアドレスのカラムは正常に記録されるが、メッセージのみが記録されないことがあります。
  • MySQLの文字コード設定が「utf8_general_ci」であるため、文字コードの関連問題が原因ではないかと考えられます。

質問者が選んだベストアンサー

  • ベストアンサー
  • pringlez
  • ベストアンサー率36% (598/1630)
回答No.3

>こういった場合、何が原因と考えられるでしょうか? 何が原因かを考えるより、どうやって原因を特定するかが重要です。 何が原因かは、私はDBがどうとか文字コードの指定がどうとかの前に、そもそもメッセージが空なんじゃないかと思います…。が、そういう予想が正しいかどうかはさておき、私ならまずINSERT直前の「メッセージ」の内容を確認します。 ファイルに書き込むのが現実的でしょうか。それを確認すれば、DBとの接続で情報が失われるのかメッセージの内容に問題があるのか、そもそもメッセージが空なのか切り分け出来ます。

noname#235729
質問者

お礼

 仰る通りでした。  大変恥ずかしながら、フォームの送信完了ページを更新すると、再びinsertされるという欠陥がありました。  セッションで管理してたもんですから、送信完了後にクリアしたセッション変数、つまり中身が入っていないものをinsertしていた状態です。  書き直して、なんとか解決したようにみえます。  本当に初歩的でお恥ずかしい限りです(^_^;  ご回答ありがとうございました。

その他の回答 (2)

回答No.2

phpのエラーログ、mysqlのエラーログに何か出ていたらそれが原因を特定する有効な情報になるかもしれませんので、一度見てみるのも手だと思います。

noname#235729
質問者

お礼

 ご回答ありがとうございました。

noname#235729
質問者

補足

 ワシが借りてるレンタルサーバーは、phpmyadminのバージョンが古すぎてログを出せないようなんですよ(^_^;

回答No.1

シングルクォーテーション文字のエスケープはしていますか? もしそれをしていないと、シングルクォーテーション文字を 含むメール本文のINSERTはエラーになります。 (参考) http://everyday-growth.com/?p=45 それだけじゃなくて、もしそういう作りをしていると SQLインジェクション攻撃でデータベースを盗み見されたり 操作されたりする可能性があります。 (参考) http://shoyu-ramen23.jugem.jp/?eid=144

noname#235729
質問者

お礼

 ご回答ありがとうございました。

noname#235729
質問者

補足

 エスケープという形ではなく、インジェクションを防ぐ目的でも、クエリの発行はqueryではなく、prepareを使っています。  だから、クォーテーションはシングルもダブルもそのまま記録されるようになってまして、試しに自分で書き込んでみましたが、クォーテーションが原因で空白にはならないことを確認しています。

関連するQ&A