学びをアウトプットするblog

このブログでは、プログラミング初心者がruby on rails を用いてアプリを作成していく中で、つまづいたことやどうしたら解決することができたのかを発信しています。

phpでデータベースに接続して値を入れる。

「気づけばプロ並みをp●p」を参考に、ECサイトを作成していました。

フレームワークの勉強もしたかったのですが、スクラッチ開発をすることで、一つ一つの流れを構築していき、ロジックを理解することができると思ったからです。

 

フレームワークに頼り切ってしまうと、応用が効かなくなるという話を聞いたので、スクラッチ開発をもう一度復習も兼ねて学習しようとしていました。

 

ところが、

 

p111の商品を追加する画面を追加し、確認画面pro_add_done.phpで、データベース接続して、

INSERT文でデータを入れようとしましたが、値が入りません。

「気づけばプロ並みをp●p」のソースコードをまるまるコピペしてみましたが、それでもデータが入りません。

その時のコードがこれです。

 

<?php

try {

$pro_name = $_POST['name'];
$pro_price = $_POST['price'];

$pro_name = htmlspecialchars($pro_name, ENT_QUOTES, 'UTF-8');
$pro_price = htmlspecialchars($pro_price, ENT_QUOTES, 'UTF-8');

$dsn = 'mysql:dbname=shop;host=localhost;charset=utf8';
$user = 'root';
$password = '';
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = 'INSERT INTO mst_product(name,price) VALUES (?,?)';
$stmt = $dbh->prepare($sql);
$data = $pro_name;
$data = $pro_price;
 
$stmt->execute($data);
$dbh = null;

print $pro_name;
print 'を追加しました。<br />';
} catch (Exception $e) {
print 'ただいま障害により大変ご迷惑をお掛けしております。';
exit();
}

?>

<a href="pro_list.php">戻る</a>

</body>
 

 

ここで、「.$e->getMessage()」をcatch(Exception $e)の

print 'ただいま障害により大変ご迷惑をお掛けしております。'.$e->getMessage();

.$e->getMessage()を挿入してみました。

 

すると

こんなエラー文が

SQLSTATE[HY000]: General error: 1364 Field 'gazou' doesn't have a default value

 

gazouの値が入っていないというエラーだと思われます。

値が入っていなくても、dbにデータを挿入することができるようにするために、調べてみると、

アプリケーション→XAMPP→etc→my.cnf

のファイルの中の
[mysqld] のしたに

sql_mode=NO_ENGINE_SUBSTITUTION

 

を挿入して、サーバーを再起動すると、

 

データがすべて入っていなくても、値を挿入することができました。

f:id:at_at_0209:20200420103640p:plain

 

f:id:at_at_0209:20200420103712p:plain