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

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

詳細はこちら
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Q&A

解決済

2回答

1051閲覧

Insertの保存の違いが知りたいです

higa_yomityu

総合スコア41

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

0グッド

0クリップ

投稿2021/01/14 16:06

Insert構文を使ってformの情報を保存したいのですが、保存に対する記述の仕方が理解できません。
下記の記述の方法では何が違うのでしょうか?

if($_POST){ $statement=$db->prepare('INSERT INTO members(name,password,date) VALUES(:name,:password,now())'); $statement->bindParam(':name',$_SESSION['join']['name'],PDO::PARAM_STR); $statement->bindParam(':password',$_SESSION['join']['password'],PDO::PARAM_STR); $statement->execute(); }
$statement=$db->prepare('INSERT INTO members SET name=?,password=?'); $statement->execute(array( $_SESSION['join']['name'], sha1($_SESSION['join']['password']) )); }

formの情報をmembersというテーブルに保存したいです。
保存する内容は別のファイルからSESSION変数で情報を遷移させており、SESSION変数の内容を保存したいです。

$dbにはデータベースとつなげるための記述が代入されています。

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

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

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

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

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

m.ts10806

2021/01/14 19:29

テーブル定義次第な記述があります。 一応聞いておきますが、「やりたいことはどちらでもできている」のでしょうか? 定義次第では出来てないと思いますし、コードが一部しかないので判断しかねる点もあります。 パスワードはハッシュしたいのかしたくないのか とか。 「どういう形で保存したいか」も含めて提示されたほうが良いかと思います。
退会済みユーザー

退会済みユーザー

2021/01/15 00:25 編集

INSERT INTOにSETって組み合わせないと思う、たぶんUPDATEにSETだろうとは察するけど。UPDATE文ではWHERE句がないと全部のデータを更新してしまうからね。
m.ts10806

2021/01/15 00:48 編集

m6uさん MySQLのみにある「方言」です。 https://dev.mysql.com/doc/refman/5.6/ja/insert.html INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [PARTITION (partition_name,...)] SET col_name={expr | DEFAULT}, ... [ ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... ]
guest

回答2

0

ベストアンサー

どの点についての疑問かわからないので、わかる範囲で回答します。

■SQL構文
後者は確かMySQLの方言だったはず。

■プレースホルダ
前者:名前付きプレースホルダ(:name)
後者:疑問符プレースホルダ(?)

■バインド変数の渡し方
前者:bindParam()で設定し、execute()実行
後者:execute()の引数に直接渡す

PDOを使用してのDB接続については以下の記事がおすすめです。
PHPでデータベースに接続するときのまとめ

投稿2021/01/14 18:14

javahack

総合スコア1088

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

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

higa_yomityu

2021/01/16 01:26

①名前付きと疑問符のどちらを使うかは場面によって分ける必要がありますか? ②疑問符の場合、excute()に引数を直接渡すとのことなのですが、引数を渡す前にバインドは必要ないのでしょうか?(疑問符プレースホルダという名前なのでバインドが必要なのではないか?と考えてしまっています)
javahack

2021/01/16 01:53

①業務などでルールで決められているのでなければ、好きな方でどうぞ。 混在は×。 個人的には名前付きをおすすめします。 理由は、バインド変数の個数、順番の間違いといったケアレスミスを減らせるから。 ②プレースホルダの種類と、バインド変数の渡し方に関連はありません。 リンク先を読んでください。
higa_yomityu

2021/01/16 02:01

名前付きと疑問符の使う場面はあまり関係ないのですね! 知りたかったことを学べました。ありがとうございます!
guest

0

SQLや(リレーショナル)データベースに関する理解が殆どないものとお見受けします。

データを保存し集計するのが得意なデータベースという仕組みとPHPを組み合わせてシステムを作りますが、
データベースを利用する上で避けて通れないのがSQLという言語です。

データベースごとにSQLの文法や予約語が微妙に違っていていたりしますが、
おおよそ考え方は共通しています。

データの追加→INSERT INTO文
データの更新→UPDATE文

というのは共通しています。

MYSQL 5.6より、
MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.2.5 INSERT 構文
MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.2.11 UPDATE 構文

リファレンスマニュアルでは、なんだかよくわからない記号らとともに、
こういう並びで記述してくださいよ、でないと受け付けられず処理できませんよ、
と説明しています。

データの追加→INSERT INTO文、
主キーやユニークキーが設定されているカラムで重複するようなデータの追加は怒られる。

データの更新→UPDATE文、
主キーやユニークキーが設定されているカラムで重複するようなデータの更新用に使う。
ただし、主キーやユニークキーが設定されているカラムで重複しない場合のデータの更新は更新ゼロ件として保存されない。

で、データの有無を事前にチェックしてINSERT INTO文とUPDATE文を使い分けるのが面倒だ、となると、
データベースごとにやり方が若干異なるのですが、
MYSQLですと

MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.2.5.3 INSERT ... ON DUPLICATE KEY UPDATE 構文

というものがあったりしますし、他のデータベースでも似たようなことができるようになっています。

投稿2021/01/15 00:22

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問