質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

216閲覧

PHPからMySQLへの接続失敗

Chandler_Bing

総合スコア673

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/02/09 15:56

DBをインスタンスと捉えて検索、追加などを行うクラスですが以下のようなエラーが出ます。

Notice: Undefined variable: dsn in /Applications/MAMP/htdocs/BookingSite/Database.php on line 20 Notice: Undefined variable: user in /Applications/MAMP/htdocs/BookingSite/Database.php on line 20 Notice: Undefined variable: password in /Applications/MAMP/htdocs/BookingSite/Database.php on line 20

ただ

$this->db = new PDO($dsn, $user, $password);

を変数ではなく手打ちで
'mysql:host=localhost:8889;dbname=BookingSite;charest=utf8';
'tennisuser';
'password';

を入力すると成功します。何が間違えていますか。

PHP

1<?php 2 3ini_set('display_errors', 1); 4 5class Database 6{ 7 public $dsn = 'mysql:host=localhost:8889;dbname=BookingSite;charest=utf8'; 8 public $user = 'tennisuser'; 9 public $password = 'password'; 10 public $db; 11 12 public function __construct() 13 { 14 $this->_connectDB(); 15 } 16 17 private function _connectDB() 18 { 19 try { 20 $this->db = new PDO($dsn, $user, $password); 21 $this->db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); 22 } catch (\PDOException $e) { 23 throw new \Exception('Failed to connect DB'); 24 } 25 } 26 27 public function searchhotels($word) 28 { 29 $sql="select hotel_id, country_code from areas where area like '%?%'"; 30 $stmt = $this->_db->prepare($sql); 31 $stmt->bindParam(1, $word, PDO::PARAM_STR); 32 $stmt ->execute(); 33 } 34} 35

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

php

1<?php 2 3ini_set('display_errors', 1); 4 5class Database 6{ 7 8 private $dsn = 'mysql:host=localhost:8889;dbname=BookingSite;charest=utf8'; 9 private $user = 'tennisuser'; 10 private $password = 'password'; 11 private $db; 12 13 public function __construct() 14 { 15 $this->_connectDB(); 16 } 17 18 private function _connectDB() 19 { 20 try { 21 $this->db = new PDO($this->dsn, $this->user, $this->password); 22 $this->db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); 23 } catch (\PDOException $e) { 24 throw new \Exception('Failed to connect DB:' . $e->getMessage()); 25 } 26 } 27 28 public function searchhotels($word) 29 { 30 $sql = "select hotel_id, country_code from areas where area like ?"; 31 $stmt = $this->_db->prepare($sql); 32 $stmt->bindParam(1, '%' . $word . '%', PDO::PARAM_STR); 33 $stmt->execute(); 34 } 35 36} 37

投稿2019/02/09 16:01

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Chandler_Bing

2019/02/09 16:16

ありがとうございます。丁度Likeのところも苦戦しておりました。。。
Chandler_Bing

2019/02/09 16:19

$sql = "select hotel_id, country_code from areas where area like ?"; $stmt = $this->db->prepare($sql); $stmt->bindParam(1, '%' . $word . '%', PDO::PARAM_STR); $stmt->execute(); を実行すると Fatal error: Uncaught Error: Cannot pass parameter 2 by reference in /Applications/MAMP/htdocs/BookingSite/Database.php:32 Stack trace: #0 /Applications/MAMP/htdocs/BookingSite/showhotels.php(12): Database->searchhotels('\xE3\x82\xBB\xE3\x83\x96') #1 {main} thrown in /Applications/MAMP/htdocs/BookingSite/Database.php on line 32 のようなエラーがでます。 他にも $stmt->bindValue(1, "%{$word}%", PDO::PARAM_STR); のような形も試しましたがダメです。
退会済みユーザー

退会済みユーザー

2019/02/09 16:21

本題に関係のない質問ですね。
Chandler_Bing

2019/02/09 16:25

select hotel_id, country_code from areas where area like '%地名%'; この形でMySQlでは値が取得できます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問