タグ

MySQLとPDOに関するiwwのブックマーク (7)

  • スクロール可能なカーソルとは?

    What is PDO scrollable cursor? PDO の prepare メソッドのマニュアルに次のオプションが指定されているが、カーソルとは何かの説明がなかったので、検索したら stackoverflow の回答がでてきた。 $sth = $dbh->prepare($sql, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]); スクロール可能なカーソルはイテレーションの巻き戻しが可能であり、同じ列に複数回アクセスできる。スクロール可能ではないカーソルはフォワードオンリーとしても知られ、列のフェッチは一度だけである。最後の列を取得すると SQLSTATE 02000 が返される。 PDO の定義済みの定数の説明では次のように書かれている。 PDO::CURSOR_FWDONLY は「前進のみ可能なカーソルを有する PDOStatemen

    スクロール可能なカーソルとは?
    iww
    iww 2014/08/09
    PDO::ATTR_CURSORにPDO::CURSOR_SCROLLとか設定する話
  • PHP: プリペアドステートメントおよびストアドプロシージャ - Manual

    より成熟したデータベースの多くは、プリペアドステートメントという 概念をサポートしています。プリペアドステートメントとはいったい何の ことでしょう? これは、実行したい SQL をコンパイルした 一種のテンプレートのようなものです。パラメータ変数を使用することで SQL をカスタマイズすることが可能です。プリペアドステートメントには 2 つの大きな利点があります。 クエリのパース (あるいは準備) が必要なのは最初の一回だけで、 同じパラメータ (あるいは別のパラメータ) を指定して何度でも クエリを実行することができます。クエリを実行するには、準備として クエリの解析やコンパイル、そして実行プランの最適化が行われます。 クエリが複雑になると、この処理には時間がかかるようになります。 同じクエリを異なったパラメータで何度も実行すると、アプリケーションの 動作は目に見えて遅くなるでしょう。

    iww
    iww 2014/06/19
    出力パラメータを指定してストアドプロシージャをコール
  • PHP: MySQL (PDO) - Manual

    はじめに PDO_MYSQL は、PHP から MySQL データベースへのアクセスを可能にするための PHP Data Objects (PDO) インターフェイス を実装したドライバです。 PDO_MYSQLは、 デフォルトでエミュレートされたプリペアドステートメントを使います。 MySQL 8 PHP 7.1.16 より前のバージョン、もしくは PHP 7.2.4 より前の 7.2系の PHP では、 MySQL 8 サーバーのデフォルトパスワードプラグインを mysql_native_password に設定するようにしてください。 さもないと、 The server requested authentication method unknown to the client [caching_sha2_password] のようなエラーを見ることになります。たとえあなたが cach

    iww
    iww 2011/02/28
    --with-pdo-mysql
  • PHP と MySQL と サーバサイド プリペアードステートメント - do_aki's log

    少し前のお話なのだけど、せっかくなので書いておくことにする。 MySQLのクエリログを見ていたら、 prepare に相当するログが一切流れていないことに気づいたので、PDO(mysql)でサーバサイドプリペアードステートメントが利用されていないんじゃないか疑惑が浮上。 php のバージョンは 5.2.11 mysql は 5.0 系 以下、検証してみた結果と、その対応です。 検証 簡単なソースコードを実行してみて、そのクエリログを見てみることにした。 PDO を利用 $p = new PDO('mysql:dbname=dbname;host=localhost', 'user', 'password'); $stmt = $p->prepare("SELECT * FROM table_name WHERE id=?"); $stmt->execute(array(1)); $stmt

    PHP と MySQL と サーバサイド プリペアードステートメント - do_aki's log
  • PDOとMYSQLの組み合わせでLIMITを使う場合の注意点 » とりあえず9JP

    注意点というほどでも無いかもしれないけど、一度ハマった事があるので・・・。 $sql = "SELECT * FROM example_tbl WHERE name=? age=?"; $sth = $dbh->prepare($sql); $sth-> execute(array('あいうえお' , 18)); という感じで配列で渡すと非常に手軽だけれど・・・ $sql = "SELECT * FROM example_tbl WHERE name=? age=? LIMIT ?,?"; $sth = $dbh->prepare($sql); $sth-> execute(array('あいうえお' , 18, 0, 30)); といった感じでLIMITの値を渡すとエラーが出る。 配列で渡す場合、全て文字列として渡すらしく、LIMITに文字列を渡してしまった事が原因らしい。 なので、LI

    iww
    iww 2010/10/21
    PDO::PARAM_INT を使うといいのか。 なるほど!
  • ぼくがPDOを採用しなかったわけ(Shift_JISによるSQLインジェクション)

    補足 この記事は旧徳丸浩の日記からの転載です。元URL、アーカイブはてなブックマーク1、はてなブックマーク2。 備忘のため転載いたしますが、この記事は2010年7月1日に公開されたもので、当時の徳丸の考えを示すものを、基的に内容を変更せずにそのまま転載するものです。 補足終わり PHPのデータベース・アクセス・ライブラリPDOは、DB接続時の文字エンコーディング指定ができないため、文字エンコーディングの選択によっては、プレースホルダを使っていてもSQLインジェクション脆弱性が発生します。 追記(2011/06/19) ここに来て急にブクマが追加されはじめていますが、このエントリを書いてから状況が改善しています。PHP5.3.6(2011/03/17)にて、PDOでもデータベース接続の文字エンコーディングを指定できるようになりました。この版で、UNIX版のPHPでは解決しましたが、Win

    ぼくがPDOを採用しなかったわけ(Shift_JISによるSQLインジェクション)
  • PDOでLIMIT句のプリペアードステートメントに関する不具合? - なんでも Do it yourself

    自分のXREA+Plusでの環境 ・PHP5.2.5 ・MySQL5.1.22 上で、 $rs = $myDB->prepare(’SELECT * FROM tableA WHERE id = ? group by id order by id LIMIT ? ,10′); $rs->execute(array($_GET['id'],$page)); というPDOを使った処理を行おうとしたが、どうもLIMIT句の部分がうまくいかない。 limit句の?を直接数字にしてみると動作しているので、プリペアードステートメントに関する不具合?かとも思った。 ググってみると http://kandk.cafe.coocan.jp/blog/jeans/index.php?itemid=617 似たような人がいたので、やはりそうなのかと。 とりあえず、 $rs = $myDB->prep

    iww
    iww 2008/10/02
    LIMIT句のバグについて
  • 1