
pdoでmysqlを利用しています。
基本的なところですがbindValueやbindParamを使用しないで配列でバインドする場合の
違いってなんでしょうか?
個人的には型の指定をできるかの違いにしかないように思うのですが・・・
$hoge = 1;
$sth->bindValue(':hoge', $hoge, PDO::PARAM_INT);
$sth->bindParam(':hoge', $hoge, PDO::PARAM_INT);
$sth->execute(array($hoge, 'hoge'));
上記のバインドは全て同じではないのでしょうか?マニュアルを見たのですが、いまいち理解
できないので詳しい方がいらっしゃいましたら宜しくお願いします。

No.3ベストアンサー
- 回答日時:
1の補足質問の execute と bindValue の使い分けについて
executeメソッドでは、データ型を指定できません。全て、文字列として処理されます。
文字列処理で問題ない時は、executeが楽でしょう。
// 例1
$sql='insert into tablename (columnX, columnZ) values (:hoge,:hg2)';
$sth = $pdo -> prepare($sql);
$sth->bindValue(':hoge', $hoge, PDO::PARAM_INT); /* 数値のinsertなら、文字列型でいれても、通常データベース側で数値判定してくれる */
$sth->bindValue(':hg2', null, PDO::PARAM_NULL); /* ''(blank)ではなく null を入れたい時データ型明示必須。 */
// 例2
$sql='select * from tablename limit :hoge';
$sth = $pdo -> prepare($sql);
$sth->bindValue(':hoge', $hoge, PDO::PARAM_INT);
/* 接続先データベースにも寄るけど、例えばMySQLでは、limit 句には、数値しか入れてはいけません。文字列型で入れてしまうとエラーになります */
お返事ありがとうございます。
>executeメソッドでは、データ型を指定できません。全て、文字列として処理されます。
非常にわかりやすい説明でようやく理解できました。明示的に型の指定を必要する場合には
bindValueの関数を使ってバインドしてやる必要があるという事ですね!
>例えばMySQLでは、limit 句には、数値しか入れてはいけません。文字列型で入れてしまうとエラーになります
また、このような事も知らなかったので貴重な情報をいただき本当にありがとうございます。
No.2
- 回答日時:
ストアドプロシージャの結果を受ける場面では「PDOStatement::bindParam()」が必要となります。
データベースへの選択クエリや挿入、更新クエリの場合は「PDOStatement::bindValue()」や「PDOStatement::execute()」で十分と言えそうです。参考URL:http://www.php.net/manual/ja/pdo.prepared-statem …
No.1
- 回答日時:
これは、値をバインドするのか、参照をバインドするのかの違いです。
マニュアルの例ではピンとこないかもしれません。
「$sth->ececute()」の直前で、「$hoge」の値を別の数字(例えば「2」)に変更したとき反映されるのが、参照をバインドする「PDOStatement::bindParam()」です。「PDOStatement::bindValue()」で「$hoge」をバインドした場合は、その時点での値が使われることになります。
それがつまり「PDOStatement::bindParam()」のマニュアルに記載されいる、「PDOStatement::execute() がコールされたときのみ評価されます。」という説明の答えです。
参考URL:http://www.php.net/manual/ja/pdostatement.bindpa …
この回答への補足
お返事ありがとうございます。なんとなくですがイメージが掴めたような気がします。
bindValueかbindParamで言えば普段使うにはbindParamのほうが良さそうですね。
しかし両者をどちらも使用しないで配列でバインドした時のメリットやデメリットがわかりません。
bindValueかbindParamを使用せず配列でバインドした場合の違いを教えていただけますと幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- HTML・CSS 全部のアクセスを指定したページに転送させたい 2 2022/06/28 16:33
- C言語・C++・C# プログラミングのペーパーテスト 実行結果を表示せよ #include <stdio.h> int h 1 2022/07/09 15:27
- XML XML同じ名前の要素を自動で集約するツール 1 2022/04/11 09:21
- JavaScript JavaScriptで「〇以上▲まで」の書き方 1 2022/07/20 14:44
- C言語・C++・C# プログラミングのペーパーテスト 実行結果がどのように表示されるか答えよ #include <stdi 1 2022/07/09 14:27
- JavaScript javascriptで文字分割は、 split() などメソッド不要??? 4 2023/02/06 22:50
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- その他(プログラミング・Web制作) pythonのcondaコマンドの仕様について 2 2022/06/24 00:13
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どういうプログラムを関数化を...
-
PHPの名前空間インポートについて
-
次のhtml・cssでspan内の文字を...
-
pdoについて
-
VBA コレクションに2次元配列...
-
Dosブロンプトでtabを出力したい
-
スクレイピングに適した言語を...
-
C#でのForm間のデータ受け渡し...
-
shシェルスクリプト 空白行の...
-
「取得先」という表現について
-
ファイル名に日付の挿入
-
DTOとEntityの差は何ですか。
-
EXCEL、マクロ-改ページ行番号...
-
バッチファイルでpingの結果を...
-
php 入力画面から確認表示画面...
-
wordの差し込み印刷で文字...
-
【C#】DataGridViewの最大列数...
-
jQueryのスライドショーのカス...
-
ログインしたら他からログイン...
-
DMMの動画を全件取得したのです...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA コレクションに2次元配列...
-
VB.NETからVBAマクロ(引数)を呼...
-
PHP、ヒアドキュメント内でのIF...
-
エラーの理由が分りません。Pri...
-
どういうプログラムを関数化を...
-
可変変数にアロー演算子を使いたい
-
protectedなのにアクセスできな...
-
PHPの名前空間インポートについて
-
ASPのResponse.WriteをPHPでは...
-
[C++]std:mapの扱いを教えて頂...
-
vb作成したらでbeep音が鳴りま...
-
PHPの変数値をリンクさせたい
-
次のhtml・cssでspan内の文字を...
-
既存関数の上書き
-
classの再定義エラーについて
-
[C#]Arraylistに追加した構造体...
-
.htaccessについて
-
共用体のサイズをsizeofで
-
PHPで呼び出し元の関数名の取得...
-
PHPでの画像の形式の変換
おすすめ情報