みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PHP/MySQL SQLエラーについて。

PHP/MySQLについての質問です。
当方PHP/MySQLについては初心者で、現在参考書を見ながらWebアプリケーションを作成しています。
いくらやっても成功しない例があるので、どこが間違っているのか、
なぜ成功しないのかご教示願いたいです。

エラー名:SQL実行エラー
要因:不明。SQL文を変えたりしたところ成功したこともあるので(elect id,name,age from input_table 等)SQL文に間違いがあるのか?


-------------------input.html------------------------
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<form action="input.php" method="post">
名前:<input type="text" name="nm">
年齢:<input type="text" name="age">
<input type="submit" name="exec" value="登録">

</form>
</body>
</html>
-----------------------input.php----------------------------
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<?php
//DB接続
if(!$con=mysql_connect("localhost","root","********")){ //passwardは正確
echo"接続エラー";
exit;
}

//DB選択
if(!mysql_select_db("input",$con)){
echo"DB選択エラー";
exit;
}

$sql = "insert into input_table(name,age) values('$nm',$age)";

if(!$res=mysql_query($sql)){
echo"SQL実行エラー"; //ここでこのエラーが表示されてしまう
exit;

}

echo "登録完了";

mysql_close($con);
?>
</body>
</html>
--------------------database-----------------------
create table input_table(
id int not null auto_increment,
name varchar(20) not null,
age int not null,
primary key(id)
)

投稿日時 - 2013-07-31 10:08:56

QNo.8199542

すぐに回答ほしいです

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

SQL実行エラーとだけ表示するのではなく,
echo mysql_error();
と,MySQLのエラー情報を表示してみてはどうでしょうか。
なぜエラーになるのかの理由は,これを起点に調べることになります。
http://jp2.php.net/manual/ja/function.mysql-error.php

なお,現在mysql_から始まる関数の利用は推奨されていません。
MysqliやPDO MySQLを使うことが推奨されています。
http://jp2.php.net/manual/ja/mysqlinfo.api.choosing.php

投稿日時 - 2013-07-31 11:05:06

お礼

回答ありがとうございます。
他の方の返答にも書きましたがエラー吐かせたところ

Column count doesn't match value count at row 1

このようなものが返ってきました。


皆さんの回答を見ていると…mysqlは古いようですね。
その意見も大変参考になりました。

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

投稿日時 - 2013-07-31 13:58:25

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

こんにちは。

if(!$res=mysql_query($sql)){
echo mysql_query();
echo $sql;
exit;
}
と回答しましたがすみません、コピペ失敗してました。。。


if(!$res=mysql_query($sql)){
echo mysql_error();
echo $sql;
exit;
}

です。

投稿日時 - 2013-07-31 11:25:53

補足

ありがとうございます。
そのようにしてエラー吐かせたところ

Column count doesn't match value count at row 1

と出ました。

投稿日時 - 2013-07-31 13:55:39

ANo.2

こんにちは。

>上記の2つの文を追加入力してみたのですが、私の方では相変わらずエラーが出てしまいます。
>参考書の方でもその文がなくても成功しているのです…。


原因を究明するには実行したSQLを質問に含めると回答しやすいです。

if(!$res=mysql_query($sql)){
echo mysql_query();
echo $sql;
exit;
}
にして表示されるエラーとSQLを補足下さい。



ちなみにその参考書の初版発行はいつになっていますか?
mysql_connect等使っているところ、
>その文がなくても成功しているのです…。
を見ると古そうな気がします。

投稿日時 - 2013-07-31 11:04:50

echo $sql = "insert into input_table(name,age) values('$nm',$age)";

で実際にSQLを表示してみると、

insert into input_table(name,age) values('',)

ということで値が入っていない状態になっています。

フォームから送信されたデータを取得するように、

$nm = isset($_POST['nm']) ? $_POST['nm'] : "";
$age = isset($_POST['age']) ? $_POST['age'] : "";

$sql = "insert into input_table(name,age) values('$nm',$age)";

のように修正したところ私の環境では、
「登録完了」まで動作いたしました!

ご参考になれば幸いです。

投稿日時 - 2013-07-31 10:35:07

お礼

早い返事ありがとうございます。
上記の2つの文を追加入力してみたのですが、私の方では相変わらずエラーが出てしまいます。
参考書の方でもその文がなくても成功しているのです…。

お答えいただいたのに申し訳ありません

投稿日時 - 2013-07-31 10:55:28

あなたにオススメの質問