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

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

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

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

Q&A

解決済

3回答

6642閲覧

エラーの意味を知りたい

ariiiiiga

総合スコア66

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

0グッド

0クリップ

投稿2019/03/23 11:11

前提・実現したいこと

PHPから入力フォームでデータをDBに登録する機能を作っています。
元々MYSQLで作っていた物をPostgresql用に接続部分を変更しました。
その際に下記のエラーがでたのですが、ただのSQLエラーなのでしょうか?
①入力フォーム
②入力確認ページ
③投稿完了ページ  ←ここでのエラー

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

Fatal error: Uncaught PDOException: SQLSTATE[42703]: Undefined column: 7 ERROR: column "1" does not exist LINE 1: ...INTO hosts(user_id,name,shop,point,comment) VALUES("1","ロー... ^ in /app/2.php:26 Stack trace: #0 /app/2.php(26): PDOStatement->execute() #1 {main} thrown in /app/2.php on line 26

該当のソースコード

index.php <?php ini_set( 'display_errors', 1 ); ini_set( 'error_reporting', E_ALL ); // セッションの開始 session_start(); $user_id = htmlspecialchars($_SESSION['user_id'], ENT_QUOTES, 'UTF-8'); $name = htmlspecialchars($_SESSION['name'], ENT_QUOTES, 'UTF-8'); $shop = htmlspecialchars($_SESSION['shop'], ENT_QUOTES, 'UTF-8'); $point = $_SESSION['point']; $comment = htmlspecialchars($_SESSION['comment'], ENT_QUOTES, 'UTF-8'); // データベースに接続 $conn = new PDO ( "pgsql:host=localhost;port=5432;dbname=mydb;user=username;password=****" ); $conn ->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER); $conn->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); $conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // データの追加 $sql = 'INSERT INTO hosts(user_id,name,shop,point,comment) VALUES("'.$user_id.'","'.$name.'","'.$shop.'","'.$point.'","'.$comment.'")'; $stmt = $conn -> prepare($sql); $stmt -> execute(); ?> <!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="utf-8" > <meta name="viewport" content="width=device-width, initial-scale=1"> <title>レビュー投稿完了submit-post-review</title> <link rel="stylesheet" href="style.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css"> </head> <body> <div style="text-align:center;margin:50px 0;"> <h3>登録が完了しました</h3> <input style="margin-top:20px;" type="button" onclick="location.href='index.php'"value="トップページへ戻る"> <input type="button" onclick="location.href='post_new_review.php'"value="登録ページへ戻る"> </div> </body> </html>

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

ikedas

2019/03/23 12:00

mts10806さんのおっしゃることに同意です。せめて、彼が示したリンク先の解説の「エラーが再現する小さなプログラムを作る」というところまではやってみてください。できたら質問文に追記してください。 ちなみにわたしはエラーメッセージの意味もその原因もわかりましたが、他人のデバッグを代行する気はないので今の質問内容では回答できません。
m.ts10806

2019/03/23 12:31

フォローありがとうございます。 直接解決策以外は無視される方なので助かります。
m.ts10806

2019/03/23 21:17 編集

この質問はteratailとしては非推奨です。「一度は調べましょう」と「質問するときのヒント」にあります。この質問内容ではなにも調べず丸投げしている印象しかありません。ほぼ全ての質問でね。 そもそも「丸投げ」「デバッグ依頼」は非推奨行為です。低評価、通報、無視されたければどうぞ。荒らしです。問題解決したいならサイトのガイドラインには従ってください。 従わないなら申し訳ないですが通報します。
m.ts10806

2019/03/25 03:52

>通報します 訂正。通報しました。
guest

回答3

0

こういう記事を読んで調べ方から身に付けてください。

何故かというと、回答者になるような人はこのようなエラーを出るようなコーディングをしません。
同じようなエラーに出くわしたことがあったとしても昔の話。
どうなったら出たか、なんて忘れてしまっています。

ということは、コードを動かすか、エラーメッセージで検索して
そこからコードを見て推測します。
それって質問する前にもできますよね?
熟練者じゃなくても、初心者でも関係なく等しくできまく。
意味を知りたいだけなら尚更、Google翻訳にかけるなりエラーメッセージや
エラーコードで検索すればいいだけの話です。

コードのお守りを他人にさせるようなことは
しないでくださいね。
(質問ではなくデバッグ依頼なので)

あとたしか別の質問で別の回答者にアドバイスもらってましたよね。
私も書いてましたけど、
SQLをphpから扱う場合、いきなりphpから実行するのではなく直接DBに対して実行して正常動作確認してからphpコードに利用して(この回答です)って。
それをしてないならまだ質問する段階ではないです。

投稿2019/03/23 11:14

編集2019/03/25 03:58
m.ts10806

総合スコア80765

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

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

ikedas

2019/03/23 12:01 編集

失礼。コメント書く場所間違えました。
m.ts10806

2019/03/23 12:37

後から思いましたが、回答へのフォロー・補足という意味ではこちらのコメントでも良いと思います(質問者本人に伝わるかどうかの観点では確かにあるかもしれませんが)
kaikubo_ko

2021/01/12 23:29

こういうサイトって絶対説教するやついるよね 検索妨害で迷惑だから回答しないで
m.ts10806

2021/01/12 23:35 編集

まずはご自身の未解決質問をしっかり解決させては如何でしょうか。 「参考にならない」と思うなら参考にしなければいい話で、 本回答を含め単なる説教と思うのでしたらあなたはそれまでの人だったというだけのことです。 随分過去の質問の回答を追っかけてまで言う意味が分かりません。
guest

0

ただのSQLエラーなのでしょうか?

はい。そうです。

余談
・prepare の使用方法がおかしい
・htmlspecialchars の使用箇所がおかしい
・ERRMODE_EXCEPTION が活用されていない

自前なら該当箇所を勉強し直すと良いです。
なんかの参照なら、別の学習元を探すべきです。

投稿2019/03/23 13:58

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ariiiiiga

2019/03/23 14:24

MYSQLで動いていたのでPostgresのDB内の設定が変わってしまったで合ってますか?
退会済みユーザー

退会済みユーザー

2019/03/23 14:26

エラーに関しては、別に回答したかったわけではないので適当にエラーメッセージ読んでください。書いてあるので。
ikedas

2019/03/23 15:32 編集

質問と関係ないことであっても、コードに問題などがあれば指摘してあげるのはいいことだと思うけど、そう断って書いたほうがいいんじゃないすか。そうしないと、回答者^H^H^H質問者だけでなく同様の問題に対する解決策をさがしている人にとってもノイズになります。(訂正1箇所)
退会済みユーザー

退会済みユーザー

2019/03/23 16:36

質問には「SQLエラー」で「エラーメッセージに問題箇所が書いてある」って回答しているんだけど。 同じ問題に対してここに来たとして、「エラーメッセージに回答が書いてある」以上の適切な回答は無いかと。 あれば、回答書いてくださいw
m.ts10806

2019/03/23 21:13 編集

この質問者は丸投げしかしないのでエラー見ろって言っても見ないですね。この質問者に私が回答に置いた記事を紹介するのが初めてじゃない、というのをさっきなんとなく履歴見て知りました。 答えのコード書いてくれる脚長おじさん待ちです。teratailはそういうサイトじゃないんですけどね。 質問は「SQLのエラーか?」なのでこの回答は答え方は合ってると思います。 質問の仕方が悪いだけ。指摘してもまともに取り合わないので指摘するのが面倒です。
ikedas

2019/03/23 21:55

回答を放棄するために回答欄を埋めるのは答え方として「合って」ないでしょ、と言ってる。回答だって「丸投げ」がいいわけない。
退会済みユーザー

退会済みユーザー

2019/03/25 08:21

コレと同じ状況になるのって、非常に限定的で「prepare」を正しく使えてない場合のみです。すでに「prepare」の使い方が間違っているって指摘はしているし、それ以上、何が必要と思います? この質問に、まともに付き合っても「合った回答」にはたどり着けないですよ。
ikedas

2019/03/25 08:38

何を言いたいのかすぐにわからないですが、BAもつきましたしやめときませんか。
退会済みユーザー

退会済みユーザー

2019/03/25 09:11

わかってて、オレに書かせようとしているんだと思ってた^^; 問題の本質は、「prepare」なのに、パラメータを文字連結で使用していること。正しく使えば、エラーの発生原因は取り除けるし、当然、エラーも無くなる。 オレは、ikedas さん煽って書かせようとしてたんだけど失敗したわw
guest

0

ベストアンサー

php

1// データの追加 2$sql = "INSERT INTO hosts(user_id,name,shop,point,comment) VALUES('".$user_id."','".$name."','".$shop."','".$point."','".$comment."')";

PostgreSQLでの「”」と「’」の違い

余談
参考としてあげたリンクを見ると、MySQLだと"でも動くみたいですが、MySQLだろうが、"で文字列をかこんでいる参考書はロクなものじゃないので捨てたほうがいいです。
(個人的には実務ではMySQLしか触ったことないですが、"で囲んだSQLは、自分でも他人でもみたことないです)

投稿2019/03/25 01:13

papinianus

総合スコア12705

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

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

ariiiiiga

2019/03/25 03:06

まさしくその通りでした! 勉強になりました、ありがとうございます⁉
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問