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

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

新規登録して質問してみよう
ただいま回答率
85.37%
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回答

5585閲覧

DBテーブルのカラム名にハイフンが入っている場合に、PDOの名前付きプレースホルダを使う方法

chibi_kuma

総合スコア85

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クリップ

投稿2021/08/23 07:20

PDOを使い、「名前付きプレースホルダ」を使ってデータをINSERTしたいのですが、
カラム名にハイフンが入っているせいで、以下のエラーが出ます。

SQLSTATE[HY093]: Invalid parameter number: :original-price

PHP

1$sql = 'INSERT INTO tbl_sample VALUES (:code, :original-price);'; 2$stmt = $dbh->prepare($sql); 3$stmt->bindValue(':code', $code, PDO::PARAM_STR); 4$stmt->bindValue(':original-price', $original-price, PDO::PARAM_INT);

「疑問符プレースホルダ」を使えば上手く行くのですが…
実際のコードではカラム数が多い為、あまり疑問符ではやりたくなくて…

カラム名にハイフンが入っている時、「名前付きプレースホルダ」を使って
DB操作するには、どうしたらよいのでしょうか?

クォート(シングル、ダブル)で括ってみたり、
バッククォートで括ってみたりしてみましたが、
上手く行きませんでした。

※ そもそも、カラム名にハイフンを入れる事が問題であることは、重々承知しています…

開発環境は、以下の通りです。
PostgreSQL 12.7
PHP 7.4.20

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

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

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

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

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

guest

回答3

0

ベストアンサー

プレースホルダーの名前は別にカラム名である必要はないですよ

投稿2021/08/23 07:25

yambejp

総合スコア116439

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

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

chibi_kuma

2021/08/23 07:55

yambejpさん、ご回答いただきありがとうございました… 「プレースホルダーの名前は別にカラム名である必要はない」 なな、なんですと…その発想は無かった… 修正をしたところ、無事動きましたぁ! ありがとうございますっ!!
guest

0

以下のようにバインドしてやるとイケるはずです!

diff

1- $stmt->bindValue(':original-price', $original-price, PDO::PARAM_INT); 2+ $stmt->bindValue(2, $original-price, PDO::PARAM_INT);

【PHP】PDOのプリペアドステートメントで疑問符パラメータと名前付きパラメータを混在させるとどうなるか
とっても見やすくなるのでオススメです!










ウソです。
yambejp さんの回答のように、スネークケースなりキャメルケースにでもして回避すると良いです。

投稿2021/08/23 08:24

編集2021/08/23 08:31
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

実際のコードではカラム数が多い為、あまり疑問符ではやりたくなくて…

コードに直書きすると二重、三重管理になってしまって余計面倒なので、実際のカラム名とパラメータ名を紐づけた形で設定ファイル(もしくはそういう連想配列)をグローバルに参照できる箇所に定義しておき、そちらから取得するように実装すると管理もしやすくなります。

投稿2021/08/23 07:33

m.ts10806

総合スコア80875

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

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

chibi_kuma

2021/08/23 07:57

m.ts10806さん、ご回答いただき、ありがとうございます。 そうですね。 間違えやすい箇所を管理しやすい形にしておく事が、後々の自分の為になりますね… そのようにしたいと思います。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問