- ベストアンサー
基本的なmysqlのDB操作につきまして
PHPの初心者です。あまり上達せず、困っていました。 よろしくお願いします。 用件は、POSTからもらったデータをMysqlへ追加する操作です。 とある参考書に書いてあるように、 しても、エラーで追加されません。 ちなみに、$commentの箇所を省いて、nameとpasswordだけにすると ちゃんと追加されます。これが不思議なんです。 DBへのアカウントやパスは間違っていません。 PHPのバージョンは5です。 // データの文字コードを変換する関数 function cnv_dbstring{ XXXXXX変換するコードXXXXX } if (count($_POST) > 0) { $name = $_POST["name"]; $password = $_POST["password"]; $comment = $_POST["comment"]; // データが送信されたときはデータを追加する if (strlen($name) and strlen($password) and strlen($comment)){ // データを追加する $sql = "INSERT INTO xx_xxxx_usr(name, password, comment) VALUES( '".cnv_sqlstr(cnv_dbstring($name, $db_enc))."', '".cnv_sqlstr(cnv_dbstring($password, $db_enc))."', ".cnv_sqlstr(cnv_dbstring($comment, $db_enc)).") ;"; mysql_query($sql, $conn) or die("データ追加エラー"); ←このエラーが出ます。 echo "<p>追加されたデータのID:".mysql_insert_id($conn); } }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#ANo.1の方が書かれたように「実際に投げられているSQL文」を確認しないと話が進みませんが(汗 >mysql_query($sql, $conn) or die("データ追加エラー"); とりあえず mysql_query($sql, $conn) or die("データ追加エラー" . mysql_error()); として、どういうエラーになっているかを確認してください。$commentだけ単引用符で括っていないように見えるので、それが原因じゃないかとは推測しますけど・・。 (蛇足) MySQLのバージョンはいくつでしょう。4.1以降であればクライアントの文字コードとサーバの文字コードの間で自動変換になりますから「cnv_dbstring」なんてことはしなくていいハズです。 #その代わり、set names を出すとか何とかはFAQなので割愛(汗 あと・・mysql_real_escape_stringをとおさないとマズイと思います。 http://www.php.net/manual/ja/function.mysql-real-escape-string.php
その他の回答 (1)
- masa6272
- ベストアンサー率66% (93/140)
これだけでは、判断できませんね。 mysql_query を実行する前に、$sqlを出力して、その結果を見ることをお薦めします。 それで分からなかったら、出力した$sqlの中身を、mysqlクライアント(コマンドラインでの実行)に貼り付けて、実行してみてください。 データ追加エラーと言うより、詳しい情報が得られます。
お礼
早速のお返事ありがとうございます。 大変貴重なお時間を頂きありがとうございます。
お礼
いろいろ教えて頂きありがとうございます。 >$commentだけ単引用符で括っていないように見えるので。。。 これが原因でした。 エラー内容を表示させることでわかりました。ありがとうございます。 mysql_real_escape_stringもやってみます。