- 締切済み
PDOとmysql_real_escape_str
PDOとmysql_real_escape_string() RHEL5 Apache2.x PHP Version 5.3.5 MySQL 5.1.45 を使っています。 PDOでMySQLにアクセスしている場合、、 mysql_real_escape_stringを使うと エラーになります。 Warning: mysql_real_escape_string(): Access denied for user 'apache'@'localhost' (using password: NO) in /var/www/html/hogehoge/main.php on line 190 Warning: mysql_real_escape_string(): A link to the server could not be established in /var/www/html/hogehoge/main.php on line 190 で、いろいろ調べてみたのですが、 PDOを使っている場合は、mysql_real_escape_stringは不要と書いてある場合と、PDOはSQLの脆弱性があると書いてある場合がありました。 実際はどうするのがいいのでしょうか? 以下は、とりあえずうごいているが、脆弱性がのこっているのか分からないコードです。 どうぞよろしくお願い申し上げます。 $dsn = "mysql:dbname={$objConifg->dbName}; host=127.0.0.1"; $user = $objConifg->dbUser;; $passwd=$objConifg->dbPass; try { $db = new PDO($dsn,$user,$passwd); $db->exec('SET NAMES utf8'); //print 'DB接続OK.'; } catch (PDOException $e){ die("接続エラー: {$e->getMessage()}"); } ・ ・ ・ ・ $stt = $db->prepare("select * from keywords where keyword_h1_url = \"{$REQ_PATH}\""); $stt->execute(); ========================================
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- hogehoge78
- ベストアンサー率80% (433/539)
http://www.tokumaru.org/d/20100701.html こちらの記事で詳しく検証されてました。 こちらの記事で書かれているように設定を行えば、mysqlで、文字コードをutf-8としている分には問題なさそうです。 尚、 mysql_real_escape_stringとPDOを併用するような状況なのであれば、上記のURLに記載されているようにMDB2など、別のライブラリを利用したほうが良さそうです。
- yambejp
- ベストアンサー率51% (3827/7415)
>Access denied for user 'apache'@'localhost' 今回のエラーはapacheの実行ユーザーapacheがご利用のmysqldの 使用者に登録されていないようにみえます。 単純にユーザーを追加してみてください。
補足
ありがとうございます。 なお、 mysql> GRANT ALL ON *.* TO apache@"localhost"IDENTIFIED BY "パスワード"; mysql> FLUSH PRIVILEGES; で、ユーザを追加すると、1つのシステムの中で2つDBユーザがいつことになり、 なんとうか、不自然というか、それ以外のコーディングをどのようにすればいいのか わかりません。 どのような仕組みになっているのでしょうか? よろしくお願い申し上げます。