composerのautoloadを用いてデータベース接続スクリプトを起動させたいのですが、外部スクリプトに記述すると
何故かエラーが吐き出されます。
まず仕様を書きます。
rootディレクトリ ├ index.php(接続テスト用ファイル) ├ config.rb ├ composer.json ├ vendor │ ├ composer │ ├ ircmaxell │ └ autoload.php └ resource └ Test.php(データベース接続に関するスクリプト)
次に各ファイルの中身を記述します。(必要箇所のみ抜粋)
index.php <!doctype html> <?php require_once __DIR__."/vendor/autoload.php"; use hoge\Test; $call = new Test(); $kensaku = $call->Search(); ?> <html> <head> <title>index</title> </head> <body> <?php var_dump($kensaku); ?> </body> </html>
Test.php <?php namespace hoge; class Test{ // ■ DB情報 ==================================================================== const DEBUG = false; const NAME = 'hoge_db'; const HOST = '127.0.0.1'; const CHAR = 'utf8'; const USER = 'root'; const PASS = 'huga'; // ■ DB接続 ==================================================================== public function Setsuzoku(){ $dsn = 'mysql:dbname='.self::NAME.';host='.self::HOST.';charset='.self::CHAR; $option = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_STRINGIFY_FETCHES => false ); try{ $pdo = new PDO($dsn, self::USER, self::PASS, $option); }catch(PDOException $e){ echo self::DEBUG ? $e->getMessage() : 'データベースエラー'; die; } $stmt = $pdo->query('SET NAMES '.self::CHAR); if(!$stmt){ $info = $pdo->errorInfo(); exit($info[2]); } return $pdo; } // ■ 登録件数の検索 ============================================================= public function Search(){ $sql = 'SELECT * FROM test_table'; $pdoStatement = $this->Setsuzoku()->prepare($sql); $pdoStatement->execute(); $column = array(); while($result = $pdoStatement->fetch(PDO::FETCH_ASSOC)){ $column[] = $result['test_name']; } return $column; } }
composer.json { "repositories": [ { "packagist": false } ], "require": { "ircmaxell/random-lib": "^1.2" }, "autoload": { "psr-4": { "hoge\": "/resource/" } } }
上記記述を全てindex.php内に記述した場合は問題なく期待した動作が得られるのですが、これを上記のような構造で
記述した場合に
Fatal error: Uncaught Error: Class 'hoge\PDO' not found in C:\xampp\htdocs\hoge\resource\Test.php:18 Stack trace: #0 C:\xampp\htdocs\hoge\resource\Test.php(44): hoge\Test->Setsuzoku() #1 C:\xampp\htdocs\hoge\index.php(7): hoge\Test->Search() #2 {main} thrown in C:\xampp\htdocs\hoge\resource\Test.php on line 18
というエラーが吐き出されます。
尚、最も簡単なテストをした際には何の問題もなく動作しました。
(Test.phpにecho文を記述しただけの簡単なオートロードテストです。)
なので、オートロードの名前空間などの問題ではないと思うのですが、何が問題でエラーとなっているかが全く分かりません。
よろしければご教授ください
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/30 17:03
2017/10/30 17:30
2017/10/31 03:06