• ベストアンサー
  • 暇なときにでも

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
  • 回答数2
  • 閲覧数136
  • ありがとう数9

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

  • ベストアンサー
  • 回答No.1
  • t_ohta
  • ベストアンサー率38% (4347/11194)

接続は $db = new PDO('mysql:host=localhost;dbname='.$dbname,$user,$password); または $db = new PDO("mysql:host=localhost;dbname=$dbname",$user,$password); でDB名を変数に出来ると思います。 接続処理を別ファイルにすることは問題ありません。

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

質問者からのお礼

ご回答頂きありがとうございます! PDOでも可能なんですね。 ご回答頂いたとおり書き直して接続してみます!

その他の回答 (1)

  • 回答No.2
  • coai
  • ベストアンサー率50% (152/301)

解決法は#1さんの書かれている通りです。 勝手に解説を付けくわえると、PDOとmysql関数の違いではなく、文字列を定義する際にダブルクォーテーションを使うかシングルクォーテーションを使うかの違いです。 ※この場合の要点は、変数が展開されるか否か。

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

質問者からのお礼

ご解説頂き、ありがとうございます! まだPHPもmysqlも習いたてなもので、今回の件も、ネットで理由を調べてみようと思ったのですが、知識がない分どう質問したらよいのかわからず、こちらで質問しました。 変数展開について調べて学習しようと思います。

関連するQ&A

  • 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
  • ○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
  • 接続しているデータベース名を得る

    PHP4とMySQLを使用しています。 現在接続しているデータベースの名前を取得することはできますか? <?php mysql_connect('dbhost', 'username', 'password'); mysql_select_db("my_database") ・・・・・・・・・・ ?> としたときに、「my_database」を抜き出したいと思います。 よろしくお願いします。

    • 締切済み
    • 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
  • データベースのlocalhostの設定について

    初心者なので的外れなことを聞いていたらすみません。 phpからPDOを使ってローカル環境のデータベースに接続しようとしたのですが、localhostの接続先を変更することはできますか? mysqlが画像の通りに2つあり、MAMPで開発を進めているのですがMAMPの方ではないmysqlに接続したいのです。 下記のように接続すると、MAMPの方のmysqlに繋がります。 $db = new PDO('mysql:dbhost=localhost;dbname=db', $user, $pass); configあたりを変更すれば良いのでしょうか? ご回答宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • データベースに接続できない・・・。

    こんにちは。 PHPとmysqlでデータベースを作ろうと思っています。 mysqlサーバーに今回使うAテーブルだけを使用できる権限でuesrを作りました。 PHPから接続するのに if(!$con = mysql_connect("localhost", "user", "test")){ die("データベース接続エラー.<br />"); } mysql_select_db("A","$con"); というスクリプトを書いたら Warning: Access denied for user: 'user@localhost' (Using password: YES) in /usr/local/asuka/virtual/B3X000804/files/htdocs_russ.jp/shopping/shop_kanri/knri_menyu.php on line 11 Warning: MySQL Connection Failed: Access denied for user: 'user@localhost' (Using password: YES) in /usr/local/asuka/virtual/B3X000804/files/htdocs_russ.jp/shopping/shop_kanri/knri_menyu.php on line 11 データベース接続エラー. というエラーが表示されデータベースに接続できません。 何故でしょうか?どうにか接続する方法はありませんか? もしくはroot権限を持たさないと接続できないのでしょうか?あいまいな質問で申し訳ございませんが、よろしくお願いします。

    • ベストアンサー
    • PHP
  • データベースに接続できない

    『PHP5逆引き大全500の極意』にあるサンプルスクリプトで PHPとMYSQLと学んでいます。 XAMPPもインストールし、スタンドアロンでMysqlを操作しようと しています。 しかし、どのサンプルスクリプトをいじっても接続できません。 require("config.php"); header("Content-Type: text/plain; charset=EUC-JP"); $db = odbc_connect(ODBC_CONNECT_DSN, ODBC_CONNECT_USER, ODBC_CONNECT_PASS) or die("データソースに接続できません!\n"); でエラーがでています。 ちなみにconfig.phpの内容 // DSN define("ODBC_CONNECT_DSN", "DSN=sample_db;"); // ユーザー名 define("ODBC_CONNECT_USER", "username"); // パスワード define("ODBC_CONNECT_PASS", "password"); // テーブル名 define("ODBC_TABLE_NAME", "php500"); となっています。SQL文を実行し、テーブルを作りましたが、 上手く言っているかどうか・・・。 文字コードをちゃんと設定していないせいか、????????のような データがカラムに入っています。 サンプルスクリプト上、データベースが自動作成されるスクリプトも あるのですが・・・。 1.useename、userpassの設定 2.phpMyAdminでデータベースを作成する方法 3.データベース作成時の文字コードの設定。utf?sjis? についてヒント頂けたら幸いです。

    • ベストアンサー
    • MySQL
  • 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
  • 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 と表示されてしまいます。 構文エラーだと思い、自分で出来る限りなおしたのですが解決できません。 どなたかアドバイスよろしくお願いいたします。

  • MySqlに接続できない

    環境:PHP5,MySql5,XP 下記の構文でDBへの接続エラーがでます。 php.iniでのインクルードpathの設定もあっています。 (DB.phpも上記インクルードpathにあります) 'pear list'コマンドでDBも確かにインストールされています。 これ以外でチェックするところがあれば、教えてください。 <?php // DBクラスモジュールをインクルード require_once("DB.php"); $dbtype = "mysql"; $sv = "localhost"; $dbname = "********"; $user = "root"; $pass = "******"; // データベースに接続する $dsn = "$dbtype://$user:$pass@$sv/$dbname"; $conn = DB::connect($dsn); if (DB::isError($conn)) { die("接続エラー"); } ?>

    • ベストアンサー
    • PHP