• ベストアンサー

基本的な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); } }

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.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

future-boy
質問者

お礼

いろいろ教えて頂きありがとうございます。 >$commentだけ単引用符で括っていないように見えるので。。。 これが原因でした。 エラー内容を表示させることでわかりました。ありがとうございます。 mysql_real_escape_stringもやってみます。

その他の回答 (1)

  • masa6272
  • ベストアンサー率66% (93/140)
回答No.1

これだけでは、判断できませんね。 mysql_query を実行する前に、$sqlを出力して、その結果を見ることをお薦めします。 それで分からなかったら、出力した$sqlの中身を、mysqlクライアント(コマンドラインでの実行)に貼り付けて、実行してみてください。 データ追加エラーと言うより、詳しい情報が得られます。

future-boy
質問者

お礼

早速のお返事ありがとうございます。 大変貴重なお時間を頂きありがとうございます。

関連するQ&A