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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

SQL

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

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

Q&A

解決済

1回答

11753閲覧

mysql pdo による接続について

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

SQL

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

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

0グッド

0クリップ

投稿2016/05/10 06:30

編集2016/05/10 06:42

お世話になります。
現在MAMPの環境で、myslqにpdoによってデータを挿入しようとしているのですがうまくいきません。

ソースコード

<?php $db_user = "root"; $db_pass = "root"; $db_type = "mysql"; $db_host = "localhost"; $db_name = "test_01"; $dns = "$db_type:host=$db_host;db_name=$db_name;charset=utf8"; try { $pdo = new PDO( $dns, $db_user, $db_pass ); $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); $pdo->setAttribute( PDO::ATTR_EMULATE_PREPARES, false ); echo "接続OK<br><br>"; $pdo->beginTransaction(); // ここまでOK $sql = "INSERT INTO member(last_name, first_name, age) VALUES ('test','TE',11)"; $pdo->query( $sql ); // ここでNG $pdo->commit(); } catch( PDOException $e ) { $pdo->rollBack(); echo $e->getMessage(); } ?>

--

出力結果

接続OK

SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected

調べたところ、接続自体は出来ているようですが、いざquery()、またはprepare($sql)を実行すると【SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected】と出てしまいます。

ターミナルで直接【 INSERT INTO member(last_name, first_name, age) VALUES ('test','TE',11); 】を打てばしっかりと入ります。

query()、またはprepare($sql)の部分でうまくいっていないというのはわかるのですが、なぜうまくいかないのかがわかりません。
わかる方ご指摘をお願い致します。

追記

query()の時は
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$pdo->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );
を削除すれば、【SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected】の文言は出てきません。が、データベースにデータは挿入されていないようです。

さらに追記

prepare()の場合はこんな感じです
try {
$pdo->beginTransaction();
$sql = "INSERT INTO members (pre_userid, email) VALUES (:pre_userid, :email)";
echo "ここまでok<br><br>";
$stmh = $pdo->prepare( $sql );
echo "ここでNG<br><br>";
$stmh->bindValue( ':pre_userid', $pre_user_id, PDO::PARAM_STR );
$stmh->bindValue( ':email', $email, PDO::PARAM_STR );
$stmh->execute();
$pdo->commit();
$cnt = $stmh->rowCount();
echo $cnt . "件仮登録しました";

} catch( PDOException $e ) { $pdo->rollBack(); echo $e->getMessage(); $error[] = "データベースに登録できませんでした"; }

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

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

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

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

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

guest

回答1

0

ベストアンサー

php

1$dns = "$db_type:host=$db_host;db_name=$db_name;charset=utf8";

php

1$dns = "$db_type:host=$db_host;dbname=$db_name;charset=utf8";

に修正してください。

エラーメッセージで検索していただくと分かりますが、これは
「接続先のデータベースが選択されていない」
という意味です。

で、接続先のデータベースを指定する文字列はdbname=であってdb_name=ではありません。
http://php.net/manual/ja/ref.pdo-mysql.connection.php

投稿2016/05/10 07:00

編集2016/05/10 07:08
KiyoshiMotoki

総合スコア4791

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問