スレッド表示 | フラット表示〕 全トピック 920 件中 41 番目 次≫ ≪前

MySQLのlimitとoffsetでプレースフォルダを使用したいのですが

created: 2008-08-08 20:10 | modified: 2008-08-10 23:55 | reply: 2

[4215] MySQLのlimitとoffsetでプレースフォルダを使用したいのですが

user: volks | created: 2008-08-08 20:10
お世話になります。volksです。
MySQLについてアドバイスお願いします。

現在PHPとMySQLでデータベースへアクセスするコードを書いているのですが、
limitとoffsetの箇所にもプレースホルダを使用できるのかなと思い、試しているのですがどうも上手くできませんでした。

そこで、phpMyAdmin から直接クエリを実行してテストをしているのですが、

SELECT * FROM `user` limit 10

だと問題無いのですが、

SELECT * FROM `user` limit '10'

ではエラーになってしまいます。
プレースフォルダを使用すると

SELECT * FROM `user` limit ?

となり、自分で作った関数でSQLを生成した結果、

SELECT * FROM `user` limit '10'

というクエリが実行されてしまう状態なのですが、
エスケープの仕方がまずいのでしょうか?
それともlimitやoffsetにはプレースフォルダは使用しないものなのでしょうか?
初歩的なことかもしれませんが、ご教授お願いします。
reply: 4216 返信 編集 削除

[4216] プレースフォルダの整数型

user: ゆうじ | created: 2008-08-09 13:56
こんにちは。まいどどうも。

これからプレスホルダーを使おうと思ってはいますが
未だ使えてない管理人です。

limit '10'

さすがに limit の後が文字列だと無理ですね。


どのプレスホルダをお使いかわかりませんが
PDO でも Mysqli でもパラメータに変数をバインドする関数で
型指定ができるはずですので、整数型を指定すると
シングルクォーテーションを外してくれるのかなと思います。

PDO - 型指定は第3引数のようです
http://jp2.php.net/manual/ja/pdostatement.bindparam.php

Mysqli - 型指定は第1引数のようです
http://jp2.php.net/manual/ja/mysqli-stmt.bind-param.php


# 勘違かな?自分でプレスホルダのコードを書いてるってことか!

LIMIT の後は 整数なのでシングルクォーテーションを
つけないようエスケープ処理を実装にするってことで。

私がプレスホルダっぽいコードを書いた時には
' や ` はステートメント側で書くことにして
エスケープ処理には含めない実装にしました。
Parent: 4215  reply: 4217 返信 編集 削除

[4217] 有難うございます。

user: volks | created: 2008-08-10 23:55
ゆうじさん有難うございます。

色んなやりかたがイメージできましたので、
プレースフォルダの考え方に基づいた実装を
検討してみたいと思います。

PDO 、 Mysqli と色々とあるものですね。
このあたりも興味深いので実用性があるのか調べて見たいと思います。

有難うございました。
今後ともどうぞ宜しくお願いします。
Parent: 4216  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 41 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑