🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

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

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

1531閲覧

顧客検索システムを作っているのですが、よく分からないエラーメッセージが出てどう対応すればよいのか分かりません。

noizi.

総合スコア27

PHP

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

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/01/05 07:38

編集2021/01/05 09:07

前提・実現したいこと

勉強で顧客検索システムを作っているのですが、エラーメッセージが出てどういう意味でどう対応すればよいのか分かりません。
最初はテキストボックスの名前とデータベースのカラムの名前を統一していたのですが、後からそれぞれ違う名前に変更しました。
どうすれば正常に動くかご教授お願い致します。

発生している問題・エラーメッセージ

Error:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'C_num' in 'where clause'

該当のソースコード

PHP,HTML

1<?php 2$dsn = 'mysql:dbname=example;host=localhost'; 3$user = 'root'; 4$password = 'shapshap'; 5try{ 6 $dbh = new PDO($dsn, $user, $password); 7 $C_nam = "C_name"; 8 $C_nm = "C_num"; 9 $sql = 'select * from example where C_nam = "'.$C_nam.'" and C_nm= '.$C_nm.''; 10 //$sql = 'select * from example where C_nam = "山田 太郎" and C_nm= "111111"'; 11 12 foreach ($dbh->query($sql) as $row) { 13 $get_C_nam[] = $row['C_nam']; 14 $get_C_nm[] = $row['C_nm']; 15 $get_C_phn[] = $row['C_phn']; 16 $get_C_add[] = $row['C_add']; 17 } 18}catch (PDOException $e){ 19 print('Error:'.$e->getMessage()); 20 die(); 21} 22$dbh = null; 23?> 24 25<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 26 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 27<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> 28<head> 29 <meta charset="UTF-8"> 30 <meta name="viewport" content="width=device-width"> 31 <title>顧客検索</title> 32 <link rel="stylesheet" href="ser_style.css"> 33</head> 34<body> 35 36<div class="content"> 37 <h1>顧客検索</h1> 38 <div class="control"> 39 <label for="C_name">顧客名<span class="required">必須</span></label> 40 <input id="C_name" type="text" name="C_name" value="<?php print($get_C_nam[0]); ?>"> 41 </div> 42 <div class="control"> 43 <label for="C_num">顧客番号<span class="required">必須</span></label> 44 <input id="C_num" type="number" name="C_num" value="<?php print($get_C_nm[0]); ?>"> 45 </div> 46 <div class="control"> 47 <label for="C_phon">顧客電話番号</label> 48 <input id="C_phon" type="tel" name="C_phon" value="<?php print($get_C_phn[0]); ?>"> 49 </div> 50 <div class="control"> 51 <label for="C_sa">顧客住所</label> 52 <input id="C_sa" type="text" name="C_sa" value="<?php print($get_C_add[0]); ?>"> 53 </div> 54 <div class="control"> 55 <form action="c_search.php" method="GET"> 56 <input type="submit" value="検索"> 57 </for> 58 <form action="menu.php" method="GET"> 59 <button type="submit">メニューへ</button> 60 </form> 61 </div> 62</div> 63</body> 64</html>

試したこと

データベースのカラム名変更
$sqlの部分を変更

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

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

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

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

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

javahack

2021/01/05 10:06

既に回答・コメントで指摘されていますが、phpMyAdminのようなDBクライアントツールを導入して作成したSQLが正しく動作するか確認した方が無駄な作業を省けると思います。
退会済みユーザー

退会済みユーザー

2021/01/05 10:12

「Error:SQLSTATE[42S22]」でネット検索するだけでも、手がかりがつかめるのですけど。まずはエラーメッセージをネット検索にかけるところからはじめてはいかがでしょうか。
guest

回答2

0

ベストアンサー

SQLの構文エラーです。

エラーにあるようにこのようなSQLになってるはず。

select * from example where C_nam =山田 太郎 and C_nm="11111

まずはPHPからではなくDB直に実行して想定の結果が得られるSQLを作ってからPHPから動的に利用してください。

値だけの話であれば、プリペアドステートメントを利用すればSQLインジェクション対策も含めてやってくれるので便利ですが、SQLの構文を知らないままではマズイので、PHPのときと同じく**、クォーテーションや値の使い方をマスターするところから始めてください。**

投稿2021/01/05 07:45

編集2021/01/05 22:48
m.ts10806

総合スコア80875

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

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

noizi.

2021/01/05 09:03

回答ありがとうございます。もう一度試してみます。 その結果をこの質問で更新します。
javahack

2021/01/05 09:18

エラーメッセージやコードを書き換えてしまうと回答との整合性が取れなくなるので、元の質問文は残して修正したコードや新たに発生したエラーメッセージは追記するようにしてください。
m.ts10806

2021/01/05 09:52

質問編集を受けて。 (2回目)PHPのときと同じく、クォーテーションや値の使い方をマスターするところから始めてください。
m.ts10806

2021/01/05 09:54

あとエラーメッセージがそのまま原因です。 なぜ、頑なにPHPから実行しようとするのでしょうか。回答読んでないんでしょうか。
退会済みユーザー

退会済みユーザー

2021/01/06 00:17

引用符で疲弊する前に、ヒアドキュメント構文を活用すると吉。
m.ts10806

2021/01/06 00:34

そもそもSQL単体での引用符の使い方ができてないところが問題なので、 ヒアドキュメントはそれができてから、ですね。 MySQL以外だと二重引用符意味合いが違ってくるからそこの使い分けも覚えてもらわないと。 本人無反応なので何をどこまで理解できて解決としたか不明ですけど。
guest

0

php

1 $sql = "select * from example where C_nam = '".$C_nam."' and C_nm= ".$C_nm.";"; 2 //$sql = 'select * from example where C_nam = '山田 太郎' and C_nm= 111111;

引用符で疲弊しないよう、ヒアドキュメント構文も活用すると良いです。

php

1 $sql = <<<EOT 2select * from example where C_nam = '$C_nam' and C_nm= $C_nm; 3EOT; 4 //$sql = 'select * from example where C_nam = '山田 太郎' and C_nm= 111111;

ところで、
文字列連結でSQLクエリー文字列を編み上げるのは感心しません。
引用符をつけるかつけないか、みたいなことで消耗するくらいなら、

php

1 $sql = "select * from example where C_nam = :nam and C_nm= :nm;"; 2 $stmt = $dbh->prepare($sql); 3 $stmt->bindValue(':nam', $C_nam, PDO::PARAM_STR); 4 $stmt->bindValue(':nm', $C_nm, PDO::PARAM_INT); 5 $stmt->execute();

みたいにprepare→bindValue→executeの流れをやるべき。
ベテランでも何度も読み返すこの記事がおすすめ:PHPでデータベースに接続するときのまとめ - Qiita

あと老婆心ながら、namとnmって似たような名前の変数名の付け方はやめてほしい。
タイプミスしたら危険。そして、見誤りやすい。
nameが識別子として特別なので、丁寧な命名をしたらいいかも。
(一週間後、一ヶ月後、一年後、nmって名前の識別子が意味することを思い出せる?)

細かく言うと、処理系(PHPとSQLとJSでは世界が別)によって
大文字小文字が識別子として同一視するしないのルールが決まっているので、
雑に扱うと痛い目に遭います。

PHPでは区別します。
PHP: 基本的な事 - Manual

変数名は大文字小文字を区別します。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 9.2.2 識別子の大文字と小文字の区別

基になるオペレーティングシステムで大文字と小文字が区別されるかどうかが、データベース名、テーブル名、およびトリガー名で大文字と小文字が区別されるかどうかに影響します。これは、Windows ではこれらの名前は大文字と小文字が区別されませんが、多くの Unix では大文字と小文字が区別されることを意味します。ただし、注意が必要な例外の 1 つに OS X があります。(以下略)

カラム名、インデックス名、ストアドルーチン名、およびイベント名は、どのプラットフォームでも大文字と小文字が区別されません。カラムのエイリアスも同様です。

投稿2021/01/05 09:26

編集2021/01/06 00:17
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問