質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

6072閲覧

PHPとエラー(Unknown column 'maker_id' in 'field list')

imaharu

総合スコア32

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/07/24 15:43

よくわかるPHPの教科書を使って、PHPの学習をしています
エラーが出て困っています

調べてところ
INSERT文のVALUE()の値をシングルコーテションで囲む必要があると書かれていましたが
参考書の記述ではsprintfを使って%d or "%s" にPOSTされた情報を代入しているようです

この場合はどのように解決すればよいのでしょうか

データベースの中身

名前 mydb
テーブル my_items
要素
id item_name price
1 バナナ 200
2 リンゴ 300

エラー内容

Unknown column 'maker_id' in 'field list'

php

1<?php 2 mysql_connect('localhost', "root",'') or die(mysql_error()); 3 mysql_select_db('mydb'); 4 mysql_query('SET NAMES UTF8'); 5 6 $sql = sprintf('INSERT INTO my_items SET maker_id=%d , item_name="%s" ,price=%d', mysql_real_escape_string($_POST['maker_id']), mysql_real_escape_string($_POST['item_name']), mysql_real_escape_string($_POST['price'])); 7 mysql_query($sql) or die(mysql_error()); 8?> 9 10<p>商品を登録しました</p> 11

php

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4<meta charset="utf-8"> 5<title>商品登録</title> 6<body> 7 <p>登録する商品の情報を記入してください</p> 8 <form id="frmInput" name="frmInput" method="POST" action="input_do.php"> 9 <dl> 10 <dt> 11 <label for="maker_id">メーカーID</label> 12 </dt> 13 <dd> 14 <input name="maker_id" type="text" id="maker_id" size="10" maxlength="10"> 15 </dd> 16 17 <dt> 18 <label for="item_name">商品名</label> 19 </dt> 20 <dd> 21 <input name="item_name" type="text" id="item_name" size="35" maxlength="255"> 22 </dd> 23 24 <dt> 25 <label for="price">価格</label> 26 </dt> 27 <dd> 28 <input name="price" type="text" id="price" size="10" maxlength="10"> 29</dd> 30 31 <dt> 32 <label for="keyword">キーワード</label> 33 </dt> 34 <dd> 35 <input name="keyword" type="text" id="keyword" size="50" maxlength="255"> 36 </dd> 37 </dl> 38 <input type="submit" value="登録する"> 39 </form> 40</body> 41</html> 42

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

単純にデータベースの my_items テーブルに maker_id カラムが定義されてないので、Unknown column と言われてるだけかと。


ちなみに、PHP の mysqlエクステンション(mysql_XXXX の名前がついた関数全部) は開発が終了しており、現行の PHP バージョン 7.1 ではすでに削除されて使用できません。替わりに mysqliPDO を使って下さい。

これは「よくわかるPHPの教科書」が発行から長い年月が経ち、内容が陳腐化してしまったためです。できれば改訂版(あまり評判がよくありません・・・)か、他の最近出版された入門書を買い直すことをオススメします。

おそらく最近の入門書なら解説されていると思いますが、セキュリティ対策のため プリペアドステートメント という方法で INSERT を行うようにしてください。

投稿2017/07/24 15:57

miyahan

総合スコア3095

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

imaharu

2017/07/24 16:04

回答ありがとうございます 解決しました 大学の講義でも、mysqlエクステンション(mysql_XXXX の名前がついた関数全部)を使っていたため 全く疑うことなく書いていました。有益な情報もありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問