PHPでMySQL接続処理を共通化させたいと思い、
『初心者からちゃんとしたプロにになるPHP基礎入門』を参考に作成しました。
・データベースの名前はdbname(本来は違う名前を設定しています)
・パスワードはpassword(本来は違う名前を設定しています)
・localhostで接続
・rootで接続
とします。
まず、共通化する部分はfunction.phpとし
PHP
1 2function str2html(string $string) :string{ 3 return htmlspecialchars($string, ENT_QUOTES, 'UTF-8'); 4} 5 6function db_open() :PDO{ 7 $user = "root"; 8 $password = "pssword"; 9 $opt = [ 10 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTOPN, 11 PDO::ATTR_EMULATE_PREPARES => false, 12 PDO::MYSQL_ATTR_MULTI_STATEMENTS => false, 13 ]; 14 $dbh = new PDO('mysql:host=localhost;dbname=dbname', $user, $password, $opt); 15 return $dbh; 16} 17var_dump($dbh);
本来はvar_dumpすると、
function.php
1object(PDO)#1 (0) {}
と接続できたことがわかるはずですが、今は
function.php
1Warning: Undefined variable $dbh in C:\xampp\htdocs\function.php on line 36 2NULL
となってしまいます。
本通りに記述しているのですが、何が間違っているのでしょうか?
共通化する前に記述していた、
PHP
1$dsn = 'mysql:dbname=dbname;host=localhost;charset=utf8'; 2$user = 'root'; 3$password = 'password'; 4 5try{ 6 7 $dbh = new PDO($dsn, $user, $password,[ 8 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 9 ]); 10 echo '接続成功'; 11} catch(PDOException $e){ 12 echo '接続失敗'. $e-> getMessage(); 13 exit(); 14};
ではきちんと接続できていたので、パスワード等の間違いはありません。
回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2022/04/07 11:48