個人事業主の方必見!確定申告のお悩み解決

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

このQ&Aに関連する最新のQ&A

A 回答 (4件)

SQL実行エラーとだけ表示するのではなく,


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

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

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

Column count doesn't match value count at row 1

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


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

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

お礼日時:2013/07/31 13:58

こんにちは。



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


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

です。

この回答への補足

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

Column count doesn't match value count at row 1

と出ました。

補足日時:2013/07/31 13:55
    • good
    • 0

こんにちは。



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


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

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



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

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

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

ご参考になれば幸いです。
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2013/07/31 10:55

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qphpのエラーについてです

mysql上のデータをphpでブラウザに表示するコードを書いています。
下記のプログラムを実行した所
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampplite\htdocs\shop\index.php on line 18
というようなエラーが表示されます。
本の通りに進めているので間違っていないはずなんですが・・
どこが成立していないのでしょうか???

<?php
mysql_connect('localhost', 'root', '') or die(mysql_error());
mysql_select_db('mydb');
mysql_query('SET NAMES UTF8');

$recordSet = mysql_query('SELECT m.name, i.* FROM makers m, my_
items i WHERE m.id=i.maker_id ORDER BY id DESC');
?>

<table width="100%">
<tr>
<th scope="col">ID</th>
<th scope="col">メーカー</th>
<th scope="col">商品名</th>
<th scope="col">価格</th>
</tr>
<?php
while ($table = mysql_fetch_assoc($recordSet)) {
?>
<tr>
<td><?php print(htmlspecialchars($table['id'])); ?></tb>
<td><?php print(htmlspecialchars($table['name'])); ?></tb>
<td><?php print(htmlspecialchars($table['item'])); ?></tb>
<td><?php print(htmlspecialchars($table['price'])); ?></tb>
</tr>
<?php
}
?>
</table>

mysql上のデータをphpでブラウザに表示するコードを書いています。
下記のプログラムを実行した所
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampplite\htdocs\shop\index.php on line 18
というようなエラーが表示されます。
本の通りに進めているので間違っていないはずなんですが・・
どこが成立していないのでしょうか???

<?php
mysql_connect('localhost', 'root', '') or die(mysql_error());
mysql_select_db('mydb');
mysql_query('SET NAMES UTF8');

...続きを読む

Aベストアンサー

『C:\xampplite\htdocs\index.php の第18行に誤りがあります。』
『mysql_fetch_assoc() は、第1パラメータがリソースであるべき』のエラーです。

18行目がどこかわからないが
『while ($table = mysql_fetch_assoc($recordSet)) {』多分これかな?

『$recordSet』がSQLの結果になっていないためエラーになってます。
原因は、いろいろ
1.DBにデータがない、
2.DBのフィールドとSELECT文が一致していない
3.接続先のDBを間違えている。
4.そもそもPHPでMYSQLが使えない(PHP.iniでロードしてない)
などなど、
「mysql_connect('localhost', 'root', '') or die(mysql_error());
mysql_select_db('mydb');
mysql_query('SET NAMES UTF8');
$recordSet = mysql_query('SELECT m.name, i.* FROM makers m, my_

それぞれの関数の実行結果を確認するようにすれば、どこで原因があるのかわかると思います。
調べてみてください。

あと、「mysql_fetch_assoc() expects parameter 1 to be resource」で検索するとそれなりに情報がヒットしますよ
(英語も多いですが、そこは雰囲気で確認してみるべし)

『C:\xampplite\htdocs\index.php の第18行に誤りがあります。』
『mysql_fetch_assoc() は、第1パラメータがリソースであるべき』のエラーです。

18行目がどこかわからないが
『while ($table = mysql_fetch_assoc($recordSet)) {』多分これかな?

『$recordSet』がSQLの結果になっていないためエラーになってます。
原因は、いろいろ
1.DBにデータがない、
2.DBのフィールドとSELECT文が一致していない
3.接続先のDBを間違えている。
4.そもそもPHPでMYSQLが使えない(PHP.ini...続きを読む

QDBエラーの意味

フォームからDBにデータ挿入しようとすると

Column count doesn't match value count at row 1

というエラーが出てしまいます・・・どういう意味を持ったエラーなんでしょうか?

Aベストアンサー

カラム数と値の数が合わない、と言う事です。簡単な英語なので覚えましょう。
カラム数が4つにもかかわらず、
"INSERT INTO tablename VALUES (1,'hoge',3)"
とやった場合等に出るエラーだと思います。

Q配列をPOSTで受けとる

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j]"];
   print"$foo[$j]";
}
?>


こんな感じのことがしたいのですが
うまくいきません
どうもPOSTされてないみたいでfoo[$j]はnullです
凡ミスな気がしなくもないんですが...プログラム初心者なんで↓↓
教えてください
よろしくお願いします

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j...続きを読む

Aベストアンサー

atsuGTさんこんにちは。


受け取り側は

$foo = $_POST["foo"];

とするだけで$fooに送信された配列が格納されます。


$_POST["foo[添え字]"] ではなく、
$_POST["foo"][添え字] となります。

Q文字列から、特定の文字を削除したい

アンケートで入力された値を受け取り、メールで送信しているのですが、受け取った値から、特定の文字列を削除することは可能でしょうか?

例えば電話番号の入力の場合、
03-xxxx-xxxx →03xxxxxxxx
077-xxx-xxxx →077xxxxxxx
のように、-(ハイフン)が入力されていたら、-を削除した文字列に置換してメール送信したいのです。
入力する時に、3つのテキストエリアに分けるのは諸事情でできないので、特定の文字を削除する関数か処理方法がありましたら、教えていただきたいです。
よろしくお願いします。

Aベストアンサー

str_replace
http://itbtech.itboost.co.jp/man/php_man/function.str-replace.html

<?php
$orig_telno = "03-xxxx-xxxx";

$telno = str_replace("-", "", $orig_telno);
echo $telno;

03xxxxxxxx

“PHP 文字列” あたりをキーワードに検索すれば
そんなに難しいものでもないような。

QボタンをクリックでPHP文を実行

ボタンをクリックしたときのみPHP文を実行したいのですが・・・

<input type="button" onClink="<?php~?>">
でいけるかと思ったのですが、
ページ表示時に<?php~?>が実行されてしまい、うまくいきませんでした。

onClink="window.open(test.php)"
という方法以外でお願いします。

Aベストアンサー

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、遷移させることが大前提で動作します

ですから、ボタンを押してその場でJavaScriptと同じようにPHPが動くなんてことはありえません。
ボタンを押したらサーバーにリクエストする という動作ならば可能です。

つまり
質問で言われているような
onClink="window.open(test.php)"

<form name="f1" action="test.php" method="post">
<input type="submit" name="submit" value="submit" />
</form>
等のような形になります

こういった一般的な方法だと いちいち画面が切り替わったようになってしまうのを嫌って Ajaxでコレと同じことを、画面を切り替えずに行っているだけに過ぎません

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、...続きを読む

Q宜しくお願いします。

宜しくお願いします。
mix~max値の間、発行したクエリーからの値を配列に入れたいのですが、どうもFor文中にmin,max値は届いているのですが,$resultに値が入りません。
エラーからしてSQLで行っている変数処理に$iの値が届いてない感じがするのですが、下記のソースを見て頂いて、疑わしき点などご指摘、ご教授いただけませんでしょうか。

どうぞ宜しくお願いします。


--エラー文ここから--->
Catchable fatal error: Object of class stdClass could not be converted to string in ...




--ソースここから--->

$min = h($r -> x);
$max = h($s -> y);
for($i=$min ; $i<= $max; $i++){
$search = sprintf("SELECT id FROM Sheet WHERE no='%d'",$i);
$q_search = mysql_query($search);
$result = mysql_fetch_object($q_search);
echo $result;
}

宜しくお願いします。
mix~max値の間、発行したクエリーからの値を配列に入れたいのですが、どうもFor文中にmin,max値は届いているのですが,$resultに値が入りません。
エラーからしてSQLで行っている変数処理に$iの値が届いてない感じがするのですが、下記のソースを見て頂いて、疑わしき点などご指摘、ご教授いただけませんでしょうか。

どうぞ宜しくお願いします。


--エラー文ここから--->
Catchable fatal error: Object of class stdClass could not be converted to string in ...




--ソースここから...続きを読む

Aベストアンサー

PHPあまり詳しくないので間違っていたらすいません。


>$result = mysql_fetch_object($q_search);
でresultはobject型で代入しておりそれを表示するときにString型に変換できていないのが原因かとおもわれます。

参考URL
mysql-query
http://php.net/manual/ja/function.mysql-query.php

mysql-fetch-array
http://php.net/manual/ja/function.mysql-fetch-array.php

mysql_fetch_object
http://phpspot.net/php/man/php/function.mysql-fetch-object.html

QParse error: syntax error, unexpected T_STRING in・・・118と出るのですが

Parse error: syntax error, unexpected T_STRING in 。。。 on line 118
とでるのですが対処はどうすればよろしいでしょうか?

Aベストアンサー

118行目をみてみてください。
ダブルクォーテーションのなかでダブルクォーテーションを使ったり
してませんか?
基本的な文法ミスなので、自己解決できないと今後きびしいですよ。

Qillegal string offset

php5.3では動いていたプログラムをphp 5.4 で動かしたらwarning illegal string offsetが出て困っています。以下のプログラムでwarningが出ないようにするにはどのようにコーディングすればよいのでしょうか?


$a = array('exists' => 'foo');
if ($a['exists']['non_existent']) {
print 1;
}
print 2;
exit;

Aベストアンサー

isset()を使えばいいと思います

Qで配列(複数の要素)を渡したいとき?

こんにちわ,

今HTML+PHPで
$hoge[]にいくつかの要素が入っているとき,
それをあるfoo.phpというページに渡したいとき,
echo '<form action="foo.php" method="POST">';
echo '<input type="hidden" name="$hoge[]" >';
echo '</form>';
としたのですが,うまくいきません。

どうしたらよろしいでしょうか。

Aベストアンサー

nameじゃなく、valueでは?
あとやるなら、
for($i=0;$i<count($hoge);$i++){
print "<input type=\"hidden\" name=\"$hoge[$i][0]\" value=\"$hoge[$i][1]\">";
}
とか?

QリダイレクトでPOST

教えてください。

リダイレクトの際、POSTで次のページにデータを渡すことは可能でしょうか?

GETだと
header("Location: "a.php?no=".$no);
と、問題なくできるのですが、
できれば、パラメータを隠したいと思います。

以上ですが、よろしくお願いします。

Aベストアンサー

多分できないです。
それに、結局クライアント側に情報を送信しているのだから、POSTにしたところでパラメータを隠した事にはならないですし。
本当に隠すならサーバ側でセッション情報を引き継ぐような形にしないとダメでしょう。

AJAXのかたちにして、ページ遷移を見えなくするというのが手っ取り早いかも。


人気Q&Aランキング