• ベストアンサー
  • すぐに回答を!

PDO_MYSQLを利用したDB接続ができない

閲覧ありがとうございます。 次のコードを実行してMYSQLへの接続をしようとすると以下のようなエラーになってしまいます。 エラー!: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) try { $dbh = new PDO('mysql:host=localhost;dbname=DB名', 'ユーザ名', 'パスワード'); } catch (PDOException $e) { print "エラー!: " . $e->getMessage() . "<br/>"; die(); } どなたか原因が分かる方はご教授いただければと思います。 ちなみにmysql_connect()でなら接続できます。 phpinfoを確認すると、確かにPDO、PDO_MYSQLは表示されています。

共感・応援の気持ちを伝えよう!

  • PHP
  • 回答数2
  • 閲覧数5410
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1
  • shimix
  • ベストアンサー率54% (865/1590)

PDOで使っているsocket(/var/lib/mysql/mysql.sock)はMySQLのものと同一でしょうか。 まずはそれを確認してください。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

お礼遅れてしまい申し訳ございません。 ご指摘の通り、socketのパスが間違っていました。 mysqlのパスは変更されていて、PDOの方がデフォルトのままだったので気付きませんでした。 この度はご回答頂きありがとうございました。

その他の回答 (1)

  • 回答No.2
  • mimzy
  • ベストアンサー率33% (32/96)

Mysqlサーバの設定が/var/lib/mysql/mysql.sockではないのでしょう。 my.cnfで確認したのち PDO('mysql:host=localhost;dbname=DB名', 'ユーザ名', 'パスワード'); を PDO('mysql:host=localhost:/your_path/mysql.sock;dbname=DB名', 'ユーザ名', 'パスワード'); これでうまくいかなければ、 PDO('mysql:host=localhost;unix_socket=/your_path/mysql.sock;dbname=DB名', 'ユーザ名', 'パスワード'); のように変更してみてください。 因みに私の環境ではmysql.sockではなくmysqld.sockとなっています。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

質問を締め切るのを忘れてしまっていました。 ご回答頂きありがとうございます。 ご指摘の通り、socketのパスが間違っていました。 mysqlのパスは変更されていて、PDOの方がデフォルトのままだったので気付きませんでした。 この度はご回答頂きありがとうございました。

関連するQ&A

  • DB接続の関数化

    下記のデータベースに接続する関数の意味は「MySQLに接続して、PDOクラスで接続したデータベース情報を返す」で合っていますか? function get_db_connect(){ // MySQL用のDSN文字列 $dsn = 'mysql:dbname='. DB_NAME .';host='. DB_HOST .';charset='.DB_CHARSET; try { // データベースに接続する $dbh = new PDO($dsn, DB_USER, DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4')); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $dbh->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch (PDOException $e) { exit('接続できませんでした。理由:'.$e->getMessage() ); } return $dbh; }

    • ベストアンサー
    • PHP
  • PDOでの接続について

    こんにちは。 Webアプリケーション勉強中の者です。LAMPを使って、どうにかしようと奮闘中です。VineLinux4、Apache2、MySQL5、PHP5という構成の環境(サーバー)を準備しました。データベースアクセスにはPDOを使うつもりで、下記テストコードを書いたのですが、接続できなくて困っています。 $dsn = "mysql:host=aoss;dbname=abc"; $usr = "abc"; $psw = "1234"; try { $pdo = new PDO( $dsn, $usr, $psw ); } catch( PDOException $e ){ var_dump( $e->getMessage() ); } たったこれだけなのですが、結果が以下のようなエラーとなっています。 string(85) "SQLSTATE[28000] [1045] Access denied for user 'abc'@'localhost' (using password: YES)" MySQL Administrator や MySQL ODBC3.51Driver を使っての、MS-Accessからの接続などでは、問題ありません。 各ソフトのバージョンですが、 MySQL : 5.0.27 PHP : 5.2.4 PDO Driver: 5.0.27 です。 何から調べていけば良いのかアドバイスお願いします。 以上、よろしくお願いします。

    • 締切済み
    • PHP
  • PDOを使いたい

    PHP初心者です PHP 5.2.5 MySQL 5.1.22 PDOでMYSQLに接続するにはどうすればいいのでしょうか? いままではこんな感じでしたがPDOにするとどんな感じになるんですか? $link=mysql_connect('localhost', 'user', 'pass')or die(mysql_error()); mysql_select_db(user'); mysql_query('SET NAMES UTF8'); PDOで接続する方法らしいのですが疑問を持ってしまったので教えてください 質問1 最初の$db_nameや$passなどの変数のとこに直接、localhostと書くのはまずいですか? 質問2 古いMYSQL系はカッコで囲めばいいので簡単だったのですがPDOの記号の意味を教えてください->とか=>です 質問3 PDO::ATTR_EMULATE_PREPARESは指定する必要があるんでしょうか?指定しないとパフォーマンスが下がるんですか?PDO::ATTR_EMULATE_PREPARESとはなんでしょうか? try { $pdo = new PDO("mysql:dbname=$db_name;host=$serv","$user","$pass", array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET 'utf8`")); } catch (PDOException $e) { die($e->getMessage()); } よろしくお願いします

    • ベストアンサー
    • PHP
  • PDOでのデータベース接続について質問です

    現在、PDOでのmysqlデータベースの操作を学習しています。 以前、mysql_connectでのデータベース接続を学習していた際に、 使用したいデータベースの名前を変数名$dbnameに格納し、 $connect = mysql_connect($server, $user, $password); mysql_select_db($dbname); でデータベースに接続していました。 その要領をふまえて PDOでもデータベースの名前を変数名$dbnameに格納し、 $db = new PDO('mysql:host=localhost;dbname=$dbname',$user,$password); で接続しようと試みたところ、エラーになりました。 そこで、データベース名を変数に格納せず、 $db = new PDO('mysql:host=localhost;dbname=データベース名',$user,$password); で試してみたところ、接続が出来ました。 そこで質問なのですが、PDOでデータベースに接続する場合、 データベース名を変数に格納することは物理的に出来ないのでしょうか? それともうひとつ質問があります。 mysql_connectを使用したときはデータベース接続用のPHPファイルを作成し、 データベース接続が必要なPHPファイルの時にrequire_onceでデータベース接続用のPHPファイルを呼び出ししていましたが、PDOでもデータベース接続用のPHPファイルを呼び出して接続することは可能でしょうか? 絶対に変数に格納したいとか、絶対にデータベース接続を別ファイルにしたいというわけではありませんが、もともとmysql apiで学習していたためmysql apiとPDOの違いが少し気になってしまいました。 ご回答、よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPとMySQLについて。

    初心者です。 さくらインターネットのスタンダードプランを使っています。 phpmyadminで「test」というCSVをインポートしました。 http://php.net/manual/ja/pdo.connections.php#example-976 こちらのページをそのままコピペして「test.php」をつくりました。 <?php try { $dbh = new PDO('mysql:host=○○○.db.sakura.ne.jp;dbname=データベース名', 'ユーザ名', 'パスワード'); foreach($dbh->query('SELECT * from test') as $row) { print_r($row); } $dbh = null; } catch (PDOException $e) { print "エラー!: " . $e->getMessage() . "<br/>"; die(); } ?> しかし下記のエラーが出てしまいます。 エラー!: SQLSTATE[HY000] [1045] Access denied for user 'ユーザ名'@'IPアドレス' (using password: YES) IPアドレスは調べたら、さくらインターネットのものでした。 現在サイトを作っている最中なので.htaccessでアクセス制限していたのが原因かと思い、このIPアドレスも許可したのですが同じエラーが出ます。 どうしたら正常に表示できるのでしょうか? xamppでは、 ڑ ς݂ Ăяo 悪 Ԃ ߂ Ă Ȃ ߁A ڑ ł ܂ ł B ܂ ڑ ς݂ z X g Ȃ ߁A m ꂽ ڑ s ܂ B のように完全に文字化けして、◆の中に?がある謎の記号が並んでいたり、何が何やら・・・。 完全にお手上げでどなたか助けていただけないでしょうか。

  • ○LinuxでのPDO利用

    ○LinuxでのPDO利用 PHPで次のようなコードを記述しています。 ------------------------------------------------------------- $db = 'mysql:host=localhost;dbname=dbn'; $login = 'user'; $password = 'pass'; try { $pdo = new PDO($db , $login, $password); $sth = $pdo->prepare("SELECT * FROM USER WHERE NAME=? AND PASSWORD=?"); $sth->bindParam(1, $name); $sth->bindParam(2, $password); $sth->execute(); while($row = $sth->fetch(PDO::FETCH_ASSOC)){ $user[] = $row; } }catch(PDOException $e){ var_dump($e); } ------------------------------------------------------------- このコードがWindowsでxampp上で動かすと問題ないんですが、 Linux上で動かすと$sth->execute();でfalseが返ってきて、 値を取得できません。 設定の問題だと思うのですが、 どこにその問題があるのかが分かりません。 環境は CentOS apache 2.0 php 5.3 mysql 5.1 PDO driver,pdo_mysqlもphpinfo()から確認できてます。 php.iniにも extension=pdo.so extension=pdo_mysql.so の記述はあります。 どなたか分かる方、宜しくお願いします。

    • ベストアンサー
    • PHP
  • PDOで接続をechoするとエラーになる現象の対処

    PDOでPHPとMySQLを連動させる時にエラーが出てしまいます。 対処法を教えて下さい。 サーバーの設定(PHP・MySQLなど)が原因のような気がしていますが、自分では解決できません。 PDOでINSERTを繰り返し行っています。 下記のソースでうまく動作をしています。 しかし、ソースの中で $dbh = new PDO($DSN , $DBUSER , $DBPASS); の後に echo $dbh を入れるとエラーになってしまいます。 このプログラムは複数のレンタルサーバーなどで動作が確認できています。 今回新しくVPSを借りてプログラムを設置したら上記のような現象が出てしまいました。 php.ini , my.cnf , httpd.conf などに設定が必要なのでしょうか? 普通にPHPのプログラムは動くのですが、接続 $dbh をecho したときだけエラーになるのです。 環境 PHP:5.1.6 MySQL:5.0.77 //$DNS,$DBUSER,$DBPASSは別途設定し読み込み。 //$nameには次々に名前が入り、1件ずつDBに登録されていく。 foreach($matches as $match) { $name = $match[1]; try { $dbh = new PDO($DSN , $DBUSER , $DBPASS); //echo $dbh; $query=<<<EOF INSERT INTO sample (name) VALUES (:name) EOF; $stmt = $dbh->prepare($query); $stmt->bindParam(':name', $name); $stmt->execute(); } catch(PDOException $e) { print "Error!: " . $e->getMessage() . "<br>"; die(); } }

  • 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(); ========================================

    • 締切済み
    • PHP
  • PDOによるFirebirdへの接続が出来ません。

    現在、私はRedhut9を使って、 Apache2.0.54 PHP5.0.4 FirebirdSS1.5.2 の環境を構築しようとしています。 またPHPではMaple3.0.0というフレームワークと、 DBへの接続にPDOを使用しています。 /root/docments/sample.php(内容は下に)での接続を試みているのですが、 つながりません。 もちろんFirebirdモジュールのインストールや extension_dirの設定などはしたのですが。。。 以下のようなエラーが出てしまいます。 [root@localhost PDO-0.3]# php /root/docments/sample.php Fatal error: Call to a member function exec() on a non-object in /root/docments/sample.php on line 8 自分でも混乱しており、この情報だけでは足りないかもしれません。。。 是非教えてください! なにか心あたりのあることでも教えて頂けると助かります! /root/docments/sample.php #!/usr/bin/php <?PHP try { // tryブロック内で接続処理。テーブル作成 $dbh = new PDO('firebird:dbname=/opt/firebird/test1.gdb','sysdba','masterkey'); $dbh->exec('CREATE TABLE stock (item_id INT PRIMARY KEY, number INT)'); $dbh->exec('CREATE TABLE in_item (item_id INT , number INT)'); } catch (PDOException $e) { // Catchブロックで接続失敗時の処理を行う die($e->getMessage()); } ?>

    • ベストアンサー
    • PHP
  • PHPとデータベースの接続ができません

    開発環境はXamppで、OSはWindowsです。 データベースを使いたいと考えていますが、初心者で非常に困っています。 <?php $dsn = 'mysql:dbname=testdb1; host=127.0.0.1'; $usr = 'ユーザー名'; $passwd = 'パスワード'; try { $db = new PDO($dsn, $usr, $passwd); print '接続に成功しました'; $db = NULL; } catch (PDOException $e) { die("接続エラー:{$e->getMessage()}"); } 上記のファイル、connect.phpを実行しても、 Parse error: syntax error, unexpected T_VARIABLE in C:\xampp\htdocs\connect.php on line 3 と表示されてしまいます。 構文エラーだと思い、自分で出来る限りなおしたのですが解決できません。 どなたかアドバイスよろしくお願いいたします。