質問編集履歴

4

訂正

2015/03/14 12:31

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -128,6 +128,10 @@
128
128
 
129
129
  bindValueメソッドは値を埋め込む処理をしていると勘違いしたため、上記のような質問を致しました。
130
130
 
131
+ bindValueメソッドを記述したところでプレースホルダに値が埋め込まれて一つのSQL文になっているわけではないようです。
132
+
131
- 私の中「バイド」=「関連付け」と解釈したところ合点いきした
133
+ executeされることはじめてプリペアドステートメ実行され
134
+
135
+ executeすることでprepareに記述したSQL文がデータベース側で構文解析され、その後に値を当てはめるようになるようです。
132
136
 
133
137
  ありがとうございました。

3

誤字の修正

2015/03/14 12:31

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -118,7 +118,7 @@
118
118
 
119
119
 
120
120
 
121
- PHPマニュアルの「PDOStatement::bindValue」の説明には下記のようにります。
121
+ PHPマニュアルの「PDOStatement::bindValue」の説明には下記のようにバインドすると記述があります。
122
122
 
123
123
 
124
124
 

2

追記

2015/03/13 11:48

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -93,3 +93,41 @@
93
93
 
94
94
 
95
95
  「手順3」では「SELECT name FROM fruit WHERE price=?」と「1, 100」の命令文を別々にデータベースに送っているのでしょうか?
96
+
97
+
98
+
99
+ **【追記】※2015.03.13 20:33**
100
+
101
+
102
+
103
+ ※この質問は、luckerさんのお陰で解決済みです。
104
+
105
+
106
+
107
+ 私の日本語力の無さが原因でした。
108
+
109
+ 「安全なSQLの呼び出し方」に下記の説明があります。
110
+
111
+
112
+
113
+ > パラメータ部分を示す記号「?」のことをプレースホルダと呼び、そこへ実際の値を割り当てることを「バインドする」と呼びます。
114
+
115
+
116
+
117
+ 日本語力のない私は、「バインドする」=「値を埋め込む」と勘違いしました。
118
+
119
+
120
+
121
+ PHPマニュアルの「PDOStatement::bindValue」の説明には下記のようになります。
122
+
123
+
124
+
125
+ > 値をパラメータにバインドする
126
+
127
+
128
+
129
+ bindValueメソッドは値を埋め込む処理をしていると勘違いしたため、上記のような質問を致しました。
130
+
131
+ 私の中で「バインド」=「関連付け」と解釈したところ合点がいきました。
132
+
133
+ ありがとうございました。

1

質問の追記

2015/03/13 11:39

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -49,3 +49,47 @@
49
49
  ご存じの方いれば、ご教示ください。
50
50
 
51
51
  よろしくお願いいたします。
52
+
53
+
54
+
55
+ **【質問追記】※2015.03.13 19:11**
56
+
57
+ 質問がわからないとのご指摘を頂きました。
58
+
59
+ luckerさん ありがとうございます。
60
+
61
+ 私が「バインド」や「プレイペアドステートメント」の意味を正しく理解していないのが原因かと思います。
62
+
63
+
64
+
65
+ それぞれの言葉を使わずに質問したいと思います。
66
+
67
+
68
+
69
+ 下記のコードで動作するかと思います。
70
+
71
+
72
+
73
+ 【手順1】prepare
74
+
75
+ $stmt = $pdo->prepare('SELECT name FROM fruit WHERE price=?')
76
+
77
+
78
+
79
+ 【手順2】bindValue
80
+
81
+ $stmt->bindValue(1, 100);
82
+
83
+
84
+
85
+ 【手順3】execute
86
+
87
+ $stmt->execute();
88
+
89
+
90
+
91
+ 静的プレースホルダは「SELECT name FROM fruit WHERE price=?」と「1, 100」の命令文を別々にデータベースに送ってデータベース側で結合して実行しているとの認識でおります。
92
+
93
+
94
+
95
+ 「手順3」では「SELECT name FROM fruit WHERE price=?」と「1, 100」の命令文を別々にデータベースに送っているのでしょうか?