PHPでMySQLへデータを挿入(INSERT文)できなかった原因

やっと解決できたので備忘録として。

PHPでMySQLへデータを挿入するINSERT文を使ってて

うまく実行されませんでした。が結論から言うと

ものすごくしょーもないことが原因でした…。

結構時間を取られたのですが、

原因の特定方法は同じようなエラーで困っている方に参考になるかもしれません。

INSERT文で実行しても反映されない

まず何をしようとしていたかというと

新規アカウント登録画面を作り、入力された内容をデータベースへ登録させる

というプログラムを書いていました。

以下が問題のコード(一部抜粋)です。


include(“database.php”);
$stmt=$db->prepare(
“INSERT INTO account_info(email, name, password)
VALUES(:email, :name, :password) ”
);
$stmt->bindParam(‘:email’, $email, PDO:: PARAM_STR);
$stmt->bindParam(‘:name’, $name, PDO:: PARAM_STR);
$stmt->bindParam(‘:password’, $password, PDO:: PARAM_STR);
$stmt->execute();


include文のところはnew PDOでデータベースへアクセスする部分です。

INSERT文でaccount_infoテーブルに

フォームから入力されたE-mail、名前、パスワードを挿入しようとしたのですが、

実行してみてもテーブルに何も追加されないという症状になりました。

INSERTされない原因は何だったのか

結論だけ述べます。

$nameの変数名を間違えていました。

実際の入力フォームの名前が入る変数名が

$nameでなく$account_nameだったのです。

うーんほんとにしょーもない原因ですね…。

ただ他のコードでも変数の名前を間違えていたことがあったので、

意外と同じような失敗経験がある方は多いのではないでしょうか。

原因を特定するために

コードを眺めるだけでは間違っている箇所の特定は難しいです。

今回試したことその①

$stmt->execute();のところで簡単なif文で判定を作ってみました。


$check=$stmt->execute();
if($check){
print’成功!’;
}else{
print’失敗!’;
}


とすることで最終的にデータベースへの挿入が実行されたかどうかを確かめます。

ブラウザ上で失敗!と出ていたのでやはり挿入失敗しているようです。

(ちなみにデータベースへの接続でも同チェックをしましたが、

こちらは成功!だったのでデータベース接続はうまくいっていました。)

今回試したことその②

$emailなどの変数に値を入れてみました。

bindParamの直前にコードを入れています。


$email=testuser@localhost;
$name=testname;
$password=testpassword;
$stmt->bindParam(‘:email’, $email, PDO:: PARAM_STR);
$stmt->bindParam(‘:name’, $name, PDO:: PARAM_STR);
$stmt->bindParam(‘:password’, $password, PDO:: PARAM_STR);
$stmt->execute();


すると成功!と表示されMySQLで確認してもきちんとデータが挿入されていました。

となるとこのあたりが怪しいということで

$email, $name, $passwordの行を1つずつ消して確認しました。

そして最終的に$nameという変数じゃなく

$account_nameという変数をフォームでは使用していたということが分かりました。

いやーこれだけのミスで特定に苦労させられました。

教訓

時間を取られましたが無事データベースに入力した値を挿入させることができました。

やはりプログラムが思い通りに動いたときは嬉しいものです。

PHPでは実行時にエラーがあるとブラウザ上でエラー内容を表示してくれます。

ただ、今回のようなミスの場合はエラーメッセージが出ません。

エラーメッセージが出ないとミスの特定が少し面倒になると思います。

今回のように簡単なif文で判定を作ってみたり、

怪しい変数の受け渡しのところで、

変数に仮の値を代入してみたりするのはアリだと思いました。

(実際には他にも色々試したりGoogleで検索したりしました。)

プログラムを書いていてエラーに遭遇するのは当たり前だと思いますが、

そこで原因の特定と対処を迅速にできれば

優秀なプログラマーになれるのではないかと思います。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする