###前提・実現したいこと
PHP・mysql初心者です。
以前、ロリポップサーバーで使用するために作成したCMSを流用してCPIサーバーで使用しようと考えたのですが、上手くいかず、後述のエラーが発生します。これらのエラーは、ロリポップサーバー利用時には確認できませんでした。
###発生している問題・エラーメッセージ
string(16) "使用する想定のデータベース名" string(67) "mysql:host=127.0.0.1;port:3307;dbname=使用する想定のデータベース名;charset=utf8" Warning: PDO::query(): SQLSTATE[42000]: Syntax error or access violation: 1044 Access denied for user 'mysqlログインユーザ名'@'localhost' to database '使用する想定のデータベース名' in /usr/home/ユーザ名/html/ディレクトリ名/init.php on line 8 Warning: PDO::query(): SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected in /usr/home/ユーザーID/html/ディレクトリ名/アドミン画面.php on line 19 Fatal error: Call to a member function rowCount() on a non-object in /usr/home/ユーザー名/html/ディレクトリ名/アドミン画面.php on line 20
###該当のソースコード
アドミン画面(一部).php
PHP
1<?php 2ini_set("display_errors", On); 3error_reporting(E_ALL); 4?> 5<?php 6 session_start(); 7 $u = htmlspecialchars($_POST['id'],ENT_QUOTES); 8 $p = htmlspecialchars($_POST['pass'],ENT_QUOTES); 9 require_once("init.php"); 10?> 11 12<html> 13 <head> 14 <title>管理マスター</title> 15 <link href="styles/css.css" rel="stylesheet" type="text/css" /> 16 </head> 17 <body> 18 <?php 19 $ps = $db->query("SELECT pass FROM member WHERE name='$u'"); 20 if($ps->rowCount()>0){ 21 $r=$ps->fetch(); 22 if($r['pass']===$p){ 23 $_SESSION['us']=$u; 24 ?> 25 <script> 26 27 </script> 28 <header> 29 <h1><a href="master.php"><img src="./images/logo.png"/></a></h1> 30 </header> 31 32 <div id="master_flex"> 33 <div id="master_menu"> 34 <!--メニュー--> 35 <?php require_once("左部メニューリンク.php"); ?> 36 </div> 37 38 <div id="master_contain" class="toppage"> 39<!--------------------下層ページリンクHTML部分--------------------> 40 </div> 41 </div> 42 <?php 43 }else{ 44 session_destroy(); 45 ?> 46 <p>パスワードが違います。</p> 47 <a href="index.php">ログイン画面に戻る</a>"; 48 49 <?php 50 } 51 }else{ 52 session_destroy(); 53 ?> 54 55 <p>IDとパスワードは正しく入力してください。</p> 56 <a href="index.php">ログイン画面に戻る</a> 57 <?php 58 } 59 ?> 60 </body> 61</html>
init.php
PHP
1<?php 2 require_once("./dbcheck/check.php"); 3 $dsn = "mysql:host=$SERV;dbname=$DBNM;charset=utf8"; 4 $db = new PDO($dsn, $USER, $PASS); 5 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 6 $db->query("USE `$DBNM`"); 7?>
check.php(CPI時)
PHP
1<?php 2 $SERV="127.0.0.1;port:3307"; 3 $USER="mysqlログインユーザ名"; 4 $PASS="mysqlパスワード"; 5 $DBNM="使用する想定のデータベース名"; 6?>
check.php(ロリポップ時)
PHP
1<?php 2 $SERV = "mysql110.phy.lolipop.lan"; 3 $USER = "ユーザー名"; 4 $PASS = "パスワード"; 5 $DBNM = "使用する想定のデータベース名"; 6?>
###試したことなど
ロリポップとはサーバーの指定方法が違うため、check.phpを変更したのですが、それでもうまく繋がらず……。
http://shared-blog.kddi-web.com/products/58を参考に修正したのですが、$SERV = "127.0.0.1:3306";のような記述ではそもそも繋がらず、require_once("init.php");の時点でエラーが発生し、現在の形になりました。
(このような記述は、カゴヤに外部接続を試みたときはうまくいったのですが……。)
データベースが選択されていないという内容と思しきエラー・警告が発生するのですが、mysqlを確認してもデータベース名の誤字などは無さそうで、pass、nameという項目も正しく存在しており、主キーも設定されていました。
記述を目立って変更したのはcheck.phpのみなのですが、この記述が何等かのエラーを起こしているような気がします。
一応ポートの設定は3306も3307も試したのですが、どちらも同じ結果になってしまいました。
解決方法や原因について、ご教授いただけると大変助かります。
何卒よろしくお願いします。
###追記(10/24 19:50)
・init.phpのセミコロンの誤記について修正しました。
・ポートについて3306ではなく3307が正しいようでしたので、修正しました。
・init.phpに$db->query("USE $DBNM
");を追加したところ、新たに警告が確認できました。
・init.phpにvar_dump($DBNM);、var_dump($dsn);を行った結果を発生したメッセージを最上段に追記しました。
・アドミン画面.phpの詳細を追記しました。
###補足情報(言語/FW/ツール等のバージョンなど)
両サーバーにおける環境の差異は以下のような形です。
【CPI】 ■データベースサーバー サーバ: 127.0.0.1 via TCP/IP サーバの種類: MySQL サーバのバージョン: 5.6.30 - Source distribution プロトコル バージョン: 10 ユーザ: mysqlログインユーザ名@localhost サーバの文字セット: UTF-8 Unicode (utf8) ■ウェブサーバー Apache データベースクライアントのバージョン: libmysql - 5.5.42 PHP 拡張: mysqli curl mbstring PHP のバージョン: 5.6.19 ■phpMyAdmin バージョン情報: 4.6.2
【ロリポップ】 ■データベースサーバー サーバ: mysql110.phy.lolipop.lan (mysql110.phy.lolipop.lan via TCP/IP) Server type: MySQL サーバのバージョン: 5.6.23-log - MySQL Community Server (GPL) プロトコルバージョン: 10 ユーザ: mysqlログインユーザ名@IPアドレス サーバの文字セット: UTF-8 Unicode (utf8) ■ウェブサーバー Apache データベースクライアントのバージョン: libmysql - 5.1.73 PHP 拡張: mysqli ■phpMyAdmin バージョン情報: 4.0.10.15

回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/24 10:19
2016/10/24 10:26 編集
2016/10/24 10:47
2016/10/24 11:04
2016/10/24 11:23