タグ

PDOに関するwtrabのブックマーク (3)

  • PDOにおける一応の安全宣言と残る問題点

    8月18日にPHP5.3.7がリリースされました。このリリースにより、PDOのSQLインジェクションの問題が一応解決されたと判断しましたので、ここに「一応の安全宣言」を表明するとともに、残る問題について報告します。 PDOの問題とは何か 以前、ぼくがPDOを採用しなかったわけ(Shift_JISによるSQLインジェクション)にて報告したように、PHP5.3.5以前のPDOにはDB接続時に文字エンコーディングを指定する機能がないため、文字列リテラルのエスケープの際に文字エンコーディングをLatin1を仮定してしまうという問題がありました。この状態ですと、DBにShift_JISで接続している際に、SQLインジェクション脆弱性が混入しました。 ※ 実は、先のエントリの「追記(2010/07/01 22:20)」に紹介した方法で文字エンコーディングを指定できるのですが、ほとんど知られていないのと

  • PHP | データの削除(DELETE) - PDOの利用

    ここではデータの削除を試してみます。SQL文でDELETEを使います。 「prepare」メソッドでSQL文を作成し「execute」メソッドでSQL文をデータベースへ発行します。 <html> <head><title>PHP TEST</title></head> <body> <?php $dsn = 'mysql:dbname=uriage;host=localhost'; $user = 'testuser'; $password = 'testuser'; try{ $dbh = new PDO($dsn, $user, $password); print('<br>'); if ($dbh == null){ print('接続に失敗しました。<br>'); }else{ print('接続に成功しました。<br>'); } $dbh->query('SET NAMES sj

  • 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

  • 1