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にはプレースフォルダは使用しないものなのでしょうか?
初歩的なことかもしれませんが、ご教授お願いします。
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にはプレースフォルダは使用しないものなのでしょうか?
初歩的なことかもしれませんが、ご教授お願いします。
[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 の後は 整数なのでシングルクォーテーションを
つけないようエスケープ処理を実装にするってことで。
私がプレスホルダっぽいコードを書いた時には
' や ` はステートメント側で書くことにして
エスケープ処理には含めない実装にしました。
これからプレスホルダーを使おうと思ってはいますが
未だ使えてない管理人です。
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 の後は 整数なのでシングルクォーテーションを
つけないようエスケープ処理を実装にするってことで。
私がプレスホルダっぽいコードを書いた時には
' や ` はステートメント側で書くことにして
エスケープ処理には含めない実装にしました。
[4217] 有難うございます。
user: volks | created: 2008-08-10 23:55
ゆうじさん有難うございます。
色んなやりかたがイメージできましたので、
プレースフォルダの考え方に基づいた実装を
検討してみたいと思います。
PDO 、 Mysqli と色々とあるものですね。
このあたりも興味深いので実用性があるのか調べて見たいと思います。
有難うございました。
今後ともどうぞ宜しくお願いします。
色んなやりかたがイメージできましたので、
プレースフォルダの考え方に基づいた実装を
検討してみたいと思います。
PDO 、 Mysqli と色々とあるものですね。
このあたりも興味深いので実用性があるのか調べて見たいと思います。
有難うございました。
今後ともどうぞ宜しくお願いします。
