電子書籍の厳選無料作品が豊富!

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);
}
}

A 回答 (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 …
    • good
    • 0
この回答へのお礼

いろいろ教えて頂きありがとうございます。

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

お礼日時:2008/05/22 14:34

これだけでは、判断できませんね。


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

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

お礼日時:2008/05/22 12:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!