PHPでMySQLを複数扱う方法・接続方法

このQ&Aのポイント
  • PHPでMySQLを複数扱う方法・接続方法について、保存容量の問題やファイルの読み込み方法などについて説明します。
  • 複数のホストやデータベース名を持つ場合、ファイルを読み込んで接続する必要がありますが、それぞれのファイルを作成することで容易に扱えます。
  • また、プロフィールIDと画像を一致させるために外部統合を行うことも可能ですが、常に接続状態になるわけではありません。アクションが要求された際にファイルを読み込んで処理を行います。
回答を見る
  • ベストアンサー

phpでMysqlを複数扱う方法・接続方法

説明がわかりにくくなってしまうかもれないのですが、引き続き釣りのコミュニティサイトのようなもの作っており先ほど画像に関しての質問をここで解決したのですがさらに別問題が。 プロフ画像などを予定しておりましが一緒に釣った魚などもアルバムのようにみんなで保存しておく環境をつくろうと思ったのですが容量がいっぱいになる問題が怖いです。 そんなすぐにいっぱいになることはないと思うのですが、スマホでとってそのままアップするなど元サイズの容量がおおきくなってしまうとおもい、ついでに複数扱う方法を勉強しようとおもったしだいであります。 環境MYSQL DB1情報 ホスト test1.sql.cd DB名 demo1 ID admin1 パス pass1 DB2情報 ホスト test2.sql.cd DB名 demo2 ID admin2 パス pass2 このようにホスト名・データベース名などすべてが違う場合、その度にファイルを読み込んだりするのでしょうか? 現在 『config.php』DB_NAMEなどを書いているファイル 『sample.php』 private function __construct() { $pdo = new PDO( // DSN (Data Source Name) sprintf('mysql:dbname=%s;host=%s;charset=utf8', DB_NAME, DB_HOST ), DB_USER, DB_PASS, ); } 『index.php』 try { $user = DB::connect()->userProfile($id); } catch (Exception $e) { // エラーページに遷移 error_page($e); } このような感じで作っています。 分からない点 上記のように順番に読み取り各ページで呼び出しているのですが『sample.php』をもう一つ『sample2.php』というふうに作り同じように書いていけば使えるものなのでしょうか? また、その場合sample.phpとsample2.phpを常に読み込んでいる状態になるのでしょうか? そうなると処理速度などどうなのかなとか思ってしまいます。 sample.phpのプロフィールIDとsample2.phpの画像を一致したもの呼び出すのは統合(今回はホストも違うから外部統合?)で出来ると調べたのですが常に接続状態になるのかなど、やり方的にあっているのか不安でご質問させて頂きました。 そもそもつないでいるのは $user = DB::connect()->userProfile($id); などアクションを要求した際におこるのか、毎回すべてのファイルを読み込みアクションが要求されたら処理の部分を読み込むのか理解していません。 アクションを起こした際に読みに行くなどなら問題なくやればいいと思うのですが、いかがなのでしょうか? ご質問がわかりにくくなってしまって申し訳ございませんが、よろしくお願いいたします。

  • PHP
  • 回答数1
  • ありがとう数0

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

ファイルをアップするサーバーを複数用意して、DBは一つでいいのでは? ファイル自体は容量を食いますが、DB上のデータなんてたかが知れています DBサーバーが複数に分かれると同期がそれなりにめんどくさいことになりますので

関連するQ&A

  • PHPからMySQLに接続することができません。

    PHPからMySQLに接続することができません。 解決方法をご存じの方は教えていただけないでしょうか。 PHPから、mysql_connect を行った際、以下のエラーが発生してしまいます。 Can't connect to local MySQL server through socket '/tmp/mysql.sock' (13) 環境 OS:CentOS 5.3 DB:Mysql 5.0.67(ソースからインストール) Web:Apache PHPのソースの一部を以下に記します。   $db_host = 'localhost';//DB_NAME;   $db_user = 'user';//DB_USER;   $db_pass = 'pass';//DB_PASS;   $db = mysql_connect($db_host,$db_user,$db_pass); 以下の方法も試したのですが、エラーメッセージは変わりませんでした。   $mysql_connect("localhost:/tmp/mysql.sock","mysql","passwd") 端末のコマンドからMySQLへの接続は成功します。 ホスト名、ユーザー名、パスワードも上記と同一のものです。   $ /usr/local/mysql/bin/mysql -h localhost -u user -p   Enter password:pass 以上です。宜しくお願いします。

    • 締切済み
    • PHP
  • PHP+MySQL mysql_connectのエラー

    PHP初心者なのですが、 PHPを使用して外部ホストのMySQLデータベースから データを取り出すプログラムを開発しています。 mysql_connect関数でデータベースに接続する段階で 内部エラーとなってしまいます。 プログラムは以下のようなものです。 $url = "000.000.00.00";//外部ホストのアドレスです $user = "username"; $pass = "password"; $db = "databasename"; $link = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました。"); ホストアドレスやユーザー名、パスワードは 以前VisualBasic+ODBC+MySQLでデータを読み込んでいたときに 使用していたものなので、間違いはないと思います。 非常に初歩的な質問で申し訳ありませんが、 非常に困っております。 ご助言よろしくお願いします。

    • 締切済み
    • PHP
  • phpでmysqlのデータがupdateできません。

    仕様Apache2.0 PHP5.1.6 MySQL5.0.27 です。 以下の通りです。どこがだめですか? <FORM method="POST" action="order_regist.php"> <INPUT type="hidden" name="id" value="<?=$id?>"> <INPUT type="hidden" name="order_day" value="<?=$order_day?>"> <INPUT type="hidden" name="order" value="依頼あり"> <INPUT type="submit" value="同意して作業を依頼"> </FORM> 上記を次ページへ送信 以下次ページ /* MySQL DB接続情報の設定 DB名/ユーザー名/パスワード */ define("DB_NAME", "*****"); define("DB_USER", "*****"); define("DB_PASS", "*****"); /* リクエストデータの取得 */ $id = $_REQUEST["id"]; $order_day = $_REQUEST["order_day"]; $order = $_REQUEST["order"]; /* MySQLに接続 */ $link = mysql_connect("localhost", DB_USER, DB_PASS) or die("MySQLとの接続に失敗しました。"); /* 接続データベースを選択 */ mysql_select_db(DB_NAME) or die("データベースとの接続に失敗しました。"); /* クライアントのキャラクタセットを変更 */ mysql_query("SET NAMES ujis") or die( "クエリーの実行に失敗しました" ); /* データを更新するクエリーを設定 */ $query = "UPDATE all_cleaning_user SET order = '" . $order . "', order_day = '" . $order_day . "' WHERE id = " . $id; /* データベースにクエリーを実行 */ mysql_query($query) or die("クエリーを実行できませんでした。"); /* MySQLより切断 */ mysql_close($link); クエリーを実行できませんでしたのエラーが出ます。なぜですか?

    • ベストアンサー
    • PHP
  • phpでmysqlに接続してテーブルのデータを抽出

    テーブルのデータを抽出したいのですけど テーブルに idと対応するpassワードがあったとすると 入力フォームみたいのを作って 認証したいidとpassワードを入力してもらって それをテーブルにあるのか確認したい場合どうしたらいいでしょうか? 入力フォームはこうなっています <html> <head> <title>ユーザ認証</title> </head> <body> ユーザ認証<br> <form action="ninsyou.php" method="post" name="form1"> ユーザ名: <input name="id" type="text" id="fUserName"> <br> パスワード: <input name="pass" type="password" id="fPassWd"> <input type="submit" name="Submit" value="認証"> <input type="reset" name="Submit2" value="クリア"> </form> </body> </html> わかりにくい質問ですみません。

    • ベストアンサー
    • MySQL
  • PHPからMySQL・異なるDBにコピー

    PHPからMySQL・異なるDBに接続し同じ構造のテーブルのデータをコピーすることは可能ですか? 以下を実行するとクエリが実行されず「コピーできません」が表示されてしまいます。 どのようにすればコピーできるか教えてください。 $connect1 = mysql_connect("localhost", "user1", "pass1") ; mysql_select_db("db1", $connect1); //db1内にtable1 $connect2 = mysql_connect("localhost", "user2", "pass2") ; mysql_select_db("db2", $connect2); //db2.内にtable2 $sql = "INSERT INTO `db1` . `table1` SELECT * FROM `db2` .`table2`;"; $result = mysql_query($sql, $connect1)or die("コピーできません"); //$result内「$connect1」でも「$connect2」結果は同じです。 //table1とtable2の構造は同じです。

    • ベストアンサー
    • PHP
  • MySQL, PHP をインストール後、データベースにアクセスできません。

    自宅で使っている Windows Vista に ・Apache 2.2.8 ・PHP 5.2.6 ・MySQL 5.0.45 ・PHPMyAdmin 2.11.4 をインストールしました。 それぞれがインストールされたことは確認でき、 PHPMyAdmin でテーブルを作成、インポートなども出来たのですが、 PHP からデータベースにアクセスできずに困っています。 phpinfo(); などは表示されるのですが、 いざデータベースにアクセスしようとすると出来ず、PHPのエラーも表示されません。 $host = 'localhost'; $db_name = 'hoge'; $user = 'root'; $pass = '***'; $con = mysql_connect($host, $user, $pass) or die ("cannot connect DB"); mysql_select_db($db_name,$con) or die ("cannot select DB"); という記述以降に書かれた部分は実行されず、それ以前の部分のみ表示されます。 error_reporting(E_ALL); を記述していても何も表示されないため、原因すら分かりません。 何か心当たりはありますでしょうか?

    • ベストアンサー
    • PHP
  • PHP5でpostgresqlのデータベースに接続する簡単なPHPプロ

    PHP5でpostgresqlのデータベースに接続する簡単なPHPプログラムを書きました。 ローカルホストにブラウザでアクセスすると正常に動作し、 コマンドラインで実行すると、次のエラーが発生します。 PHP Fatal error: Call to undefined function pg_connect() コマンドラインでphpのバージョンを見ると以下のとおりです。 C:\>php -v PHP 5.3.0 (cli) (built: Jun 29 2009 21:25:23) Copyright (c) 1997-2009 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies ブラウザで、phpinfo();を実行した際の情報には postgresqlのDBドライバがあります。 pdo_pgsql PDO Driver for PostgreSQL enabled PostgreSQL(libpq) Version 8.3.3 Module version 1.0.2 Revision $Id: pdo_pgsql.c,v 1.7.2.11.2.1.2.4 2009/03/28 01:58:49 mbeccati Exp $ pgsql PostgreSQL Support enabled PostgreSQL(libpq) Version 8.3.3 Multibyte character support enabled SSL support enabled Active Persistent Links 0 Active Links 0 Directive Local Value Master Value pgsql.allow_persistent On On pgsql.auto_reset_persistent Off Off pgsql.ignore_notice Off Off pgsql.log_notice Off Off pgsql.max_links Unlimited Unlimited pgsql.max_persistent Unlimited Unlimited テストソースです。パスワード・DB名は伏せています。 <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <TITLE>PostgreSQLテスト</TITLE> </HEAD> <BODY> <?php $db_host = "localhost"; $db_port = 5432; $db_user = "postgres"; $db_pass = "xxxx"; $db_name = "yyyy"; // PostgreSQL 接続 if (!($cn = pg_connect("host=$db_host port=$db_port dbname=$db_name user=$db_user password=$db_pass"))) { die; } // PostgreSQL 切断 pg_close($cn); // 正常終了 print "<P>正常終了</P>"; ?> </BODY> </HTML> よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでのmysql_connect実行について

    PHPでのmysql_connect実行について いつもお世話になります。 自宅WEBサーバーを構築しているのですが、 PHPからのmysql_connectが実行出来ずに困っています。 サーバー構成と事象を以下に記載しますので、 お分かりでしたら回答の程よろしくお願いいたします。 ■サーバー構成 ・OS : ubuntu10 server(コアシステムのみ) ・WEB : apache2(aptitudeにてインストール) ・DB : mysql5(aptitudeにてインストール) ・PHP : PHP5(aptitudeにてインストール) ■事象 WEBサイト内にてtest.phpを作成し、 $intDB_Con_ID = mysql_connect($CONST_HOST_IP_ADDR , $CONST_DB_USER_NAME , $CONST_DB_USER_PASS); と実行するが、intDB_Con_ID には何も変更されず、PHP実行コード下に 記載しているhtmlコードが実行されない。 ■事象発生後に実施した事 (1)PHPコード自体の実行確認   echo("CONST_HOST_IP_ADDR = " . $CONST_HOST_IP_ADDR . "\n");   にて変数の内容はページリクエスト結果に出力されいている事を確認。 (2)apache errorログの確認   PHP Startup: Unable to load dynamic library './pdo.so' -   ./pdo.so: cannot open shared object file: No such file or   directory in <b>Unknown</b> on line <b>0</b><br />   と出ている事を確認。 (3)httpd.confの確認   pdo.soを読み込んでいる箇所を探すが、pdo.so自体ファイル内容検索   にヒットしない。 (4)php.iniの確認   pdo.soを読み込んでいる箇所を探すが、pdo.so自体ファイル内容検索   にヒットしない。 (5)php.iniの編集   末尾に以下を追加   extension_dir = "/usr/lib/php5/20090626+lfs/"   extension = pdo.so (6)apacheの再起動後にログ確認   <b>Warning</b>: Module 'PDO' already loaded in <b>Unknown</b> on line <b>0</b><br />     と変わったが事象変わらず。 (7)phpのログ確認   PHP Warning: Module 'PDO' already loaded in Unknown on line 0   と変わったが事象変わらず。

    • ベストアンサー
    • PHP
  • PHP+mySQL認証画面

    サーバーの引っ越しで新しいサーバーにてプログラムの動作確認を行っています。 管理者パネルに入るのに、PHPで作成した認証プログラムでログインしようとすると、入力しても何度も聞いてきて入れません。 旧 MySQL5.0.22   phpMyAdmin2.8.2.4 新 MySQL5.1.69 phpMyAdmin3.5.8.1  IDとパスワードはデータベースで設定。 管理者パネルで変更できるようになっている。 $sv = "**"; $dbname = "**"; $user = "**"; $pass = "**"; ログイン認証 //データベースに接続する $conn = mysql_connect($sv,$user,$pass) or die("接続エラー"); mysql_select_db($dbname) or die("データーベース接続エラー"); $sql = "SELECT id, pass FROM pass_t WHERE pno=1"; $res = mysql_query($sql, $conn) or die("データ抽出エラー"); while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { $db_user_id=$row['id']; $db_password=$row['pass']; } if(!isset($_SERVER["PHP_AUTH_USER"]) || $_SERVER["PHP_AUTH_USER"] != "$db_user_id" || $_SERVER["PHP_AUTH_PW"] != "$db_password") { header("WWW-Authenticate: Basic realm=\"login\""); header('HTTP/1.0 401 Unauthorized'); echo "ユーザー名またはパスワードが間違っています。<br>"; echo "もう一度はじめからやり直してください。"; exit; } 細々変えて試してみましたが駄目でした。 まだまだわからないことだらけの初心者なので、どうにもならずで 解決策がありましたらぜひ教えて頂けますと幸いです。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • 突如!接続エラー!?php

    いつもお世話になりありがとうございます。 標記の件。 下記のエラーがlocalhost/index.php/で出ました。 接続失敗SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for $host failed: ���̂悤�ȃz�X�g�͕s���ł��B 大変恐縮ではございますが、下記のコードを吟味して頂けないでしょうか? 度々申し訳ございません。 宜しくお願い申し上げます。      記 index.php <?php require_once ('blog.php'); $blog = new Blog(); $blogData = $blog->getAll(); function h($s){ return htmlspecialchars($s, ENT_QUOTES,"UTF-8"); } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>ブログ一覧</title> </head> <body> <h2>ブログ一覧</h2> <p><a href="/form.html">新規作成</a></p> <table> <tr> <th>タイトル</th> <th>カテゴリー</th> <th>投稿日時</th> <tr> <?php foreach ($blogData as $column): ?> <tr> <td><?php echo h($column['title']) ?></td> <td><?php echo h($blog->setCategoryName($column['category'])) ?></td> <td><?php echo h($column['post_at']) ?></td> <td><a href="/detail.php?id=<?php echo $column['id'] ?>">詳細</a></td> <td><a href="/update_form.php?id=<?php echo $column['id'] ?>">編集</a></td> <td><a href="/blog_delete.php?id=<?php echo $column['id'] ?>">削除</a></td> </tr> <?php endforeach; ?> </body> </html> env.php <?php define('DB_HOST','localhost'); define('DB_NAME','blog_app'); define('DB_USER','blog_user'); define('DB_PASS','**********'); ?> dbc.php <?php require_once('env.php'); class Dbc { protected $table_name; protected function dbConnect() { $host = DB_HOST; $dbname = DB_NAME; $user = DB_USER; $pass = DB_PASS; $dsn = 'mysql:host=$host;dbname=$dbname;blog_app;charset=utf8'; try { $dbh = new \PDO($dsn, $user, $pass, [ \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, ]); } catch (PDOException $e) { echo '接続失敗' . $e->getMessage(); exit(); }; return $dbh; } public function getAll() { $dbh = $this->dbConnect(); //①SQLの準備 $sql = "SELECT * FROM $this->table_name"; //②SQLの実行 $stmt = $dbh->query($sql); //③SQLの結果を受け取る $result = $stmt->fetchall(\PDO::FETCH_ASSOC); return $result; $dbh = null; } public function setCategoryName($category) { if ($category == '1') { return '日常'; } elseif ($category == '2') { return '非日常'; } else { return 'その他'; } } public function getById($id) { if (empty($id)) { exit('idが不正です。'); } $dbh = $this->dbConnect(); $sql = "SELECT * FROM $this->table_name"; $stmt = $dbh->prepare("SELECT * FROM $this->table_name Where id = :id"); $stmt->bindValue(':id', (int)$id, \PDO::PARAM_INT); $stmt->execute(); $result = $stmt->fetch(\PDO::FETCH_ASSOC); if (!$result) { exit('本文がありません。'); } return $result; } public function delete($id) { if (empty($id)) { exit('idが不正です。'); } $dbh = $this->dbConnect(); $stmt = $dbh->prepare("DELETE FROM $this->table_name Where id = :id"); $stmt->bindValue(':id', (int)$id, \PDO::PARAM_INT); $stmt->execute(); echo 'ブログを削除しました!'; return $result; } } ?> <p><a href="/">戻る</a></p> 大変、お手数をおかけします。 どうか教えてください。 宜しくお願い申し上げます。

    • ベストアンサー
    • PHP

専門家に質問してみよう