お世話になります。
現在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[] = "データベースに登録できませんでした"; }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。