SQL文で疑問に感じたことがございます。
当方、初心者でしてお手柔らかにお願いいたします。
質問です。
INSERT INTO テーブル名 VALUES(?,?,?),[レコード名1,レコード名2, レコード名3]
と、データー追加のコードがありますが、
『INSERT INTO テーブル名 VALUES(レコード名1,レコード名2,レコード名3)』ではだめなのでしょうか。
これは、もう決まりなのでこういうものなんだと、機械的に覚えるべきものなのでしょうか。
どうぞよろしくお願い致します。
普通の SQL ではそんな書き方はできないと思いますが、どのデータベース (PostgreSQL とか MySQL とか) をお使いでしょうか? また、そのコードは何か別の言語 (Java とか PHP とか) に埋め込まれてたりしますか?
構文的な質問なのだから、まず基本の構文はきちんと書きましょうよ。
質問の意味合い的には列名の列挙が省略できるか、ということでしょうか?
INSERT INTO テーブル名 (列1,列2,列3) VALUES (値1,値2,値3)
↓
INSERT INTO テーブル名 VALUES (値1,値2,値3)
こういう風に書けるかということですかね?
タグは修正できます。
MySQLではPL/pgSQLを使えません。

質問者さん、無言ですが、回答が出ているのでそれに対するフィードバックを返してください。役に立った/立たなかったぐらいはすぐに返せるのでは? 役に立たなかったならどこがダメかを書くとより期待に近い回答が出てくるかも。とにかく無言は NG です。
大変申し訳ございませんでした。
脱調により一日手術を行っておりまして、返信が遅れてしました。
質問力も乏しく本当に申し訳ない次第です。
>>INSERT INTO テーブル名 VALUES (値1,値2,値3)
こういう風に書けるかということですかね?
まさにこの通りです。
なぜ?の記号を使うのかが腑に落ちなくて・・。
でもよく考えましたらこのソースがすべて完成して、それから値を入れる(HTMLのインプットタグに数値をいれるてその数値をデーターベースに追加するつもりです)ので、プログラム作成時はハテナにしておく必要があるのではないかと、いま解釈したのですが…あってますかね
そもそもvalueは値をいれるものですよね。テーブル作成時は、なにもデーターがないのでとりあえずハテナにしているのかなと、質問しながら何となく理解してきたような気がします。
VALUES(レコード名1,レコード名2,レコード名3)にできないかと質問させていただきましたが、こんなトンチンカンな質問、ありえないですよね。すみません
? (プレースホルダー) を使う理由は SQL インジェクションを防ぐためかと。
https://blog.senseshare.jp/placeholder.html

> なにもデーターがないのでとりあえずハテナにしているのかなと
違いますよ。SQL 文をパラメータ化しているのです。「パラメータ化クエリ」などをキーワードにググってください。
ちなみに、疑問符 (?) で指定される位置パラメータマーカーと、名前を付ける名前付きパラメータというのがあります。
hoshi-takanori 様
SurferOnWww様
本当にありがとうございました!位置パラメータマーカーを使うのは、プレースホルダ―で誤動作や、セキュリティ面を考慮したものだということですね!!

ちょっと理解が違うと思いますよ。
SQL 文をパラメータ化するという手段に、? という位置パラメータを使うか、名前付きバラメータを使うというやり方があるということです。
パラメータ化の「目的」は SQL インジェクションの防止とパフォーマンスの向上です。その他いろいろ副次的な効用もありますが。
? を使うのは単なる手段の一つです。「目的」と「手段」をゴッチャにしないように。
SurferOnWww様
ご回答ありがとうございました!!!
インジェクション防止と、パフォーマンス向上をするためにパラメーター化クエリを行うのですね。
パラメーター化クエリを行うために、位置パラメータ(疑問符)を利用すると理解しました
あ、あってますかね…

位置パラメータ(疑問符)を使うのはクエリをパラメター化するための手段の一つという言い方の方が適当かも。

ところで、私は回答したのですから、私への返信は解答欄下のコメント欄にお願いします。

このスレッドの課題が解決したのであれば解決に役に立った回答にベストアンサーをつけてこのスレッドはクローズしてください。

回答2件
あなたの回答
tips
プレビュー