PHP PDOオブジェクトが既に作成された後に使用するMySQLデータベースを選択したいのですが、どうすればよいですか?
// create PDO object and connect to MySQL
$dbh = new PDO( 'mysql:Host=localhost;', 'name', 'pass' );
// create a database named 'database_name'
// select the database we just created ( this does not work )
$dbh->select_db( 'database_name' );
Mysqli :: select_dbと同等のPDOはありますか?
おそらく、PDOを不適切に使用しようとしていますか?ヘルプまたは説明してください。
[〜#〜] edit [〜#〜]
PDOを使用して新しいデータベースを作成するべきではありませんか? CREATE DATABASE
のようなデータを挿入しないめったに使用されない操作では、PDOを使用する利点の大部分が失われることを理解していますが、別の接続を使用してデータベースを作成し、PDO接続を作成する必要があるのは奇妙に思えます他の電話をかける。
通常、接続時にDSNでデータベースを指定します。ただし、新しいデータベースを作成する場合は、作成する前にそのデータベースをDSNに指定できないことは明らかです。
USE
ステートメントを使用して、デフォルトのデータベースを変更できます。
$dbh = new PDO("mysql:Host=...;dbname=mysql", ...);
$dbh->query("create database newdatabase");
$dbh->query("use newdatabase");
後続のCREATE TABLE
ステートメントが新しいデータベースに作成されます。
@Mikeからのコメント:
このようにデータベースを切り替えると、PDOが準備されたステートメントをエミュレートするように見えます。 PDO :: ATTR_EMULATE_PREPARESをfalseに設定してから、別のデータベースを使用しようとすると失敗します。
いくつかのテストを行っただけで、そのようなことは見当たりません。データベースの変更はサーバーでのみ行われ、クライアントでのPDOの構成に関する変更はありません。以下に例を示します。
<?php
// connect to database
try {
$pdo = new PDO('mysql:Host=huey;dbname=test', 'root', 'root');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
} catch(PDOException $err) {
die($err->getMessage());
}
$stmt = $pdo->prepare("select * from foo WHERE i = :i");
$result = $stmt->execute(array("i"=>123));
print_r($stmt->fetchAll(PDO::FETCH_ASSOC));
$pdo->exec("use test2");
$stmt = $pdo->prepare("select * from foo2 WHERE i = :i AND i = :i");
$result = $stmt->execute(array("i"=>456));
print_r($stmt->fetchAll(PDO::FETCH_ASSOC));
あなたが言っていることが本当なら、これはエラーなく動作するはずです。 PDO :: ATTR_EMULATE_PREPARESがtrueの場合にのみ、PDOは指定された名前付きパラメーターを複数回使用できます。したがって、データベースを変更する副作用としてこの属性がtrueに設定されていると言っている場合は、機能するはずです。
しかし、それは機能しません。エミュレートされていない準備されたステートメントが有効なままであることを示すエラー「無効なパラメーター番号」を受け取ります。
PDOオブジェクトを作成するときにデータベースを設定する必要があります。例(from here )
<?php
$hostname = "localhost";
$username = "your_username";
$password = "your_password";
try {
$dbh = new PDO("mysql:Host=$hostname;dbname=mysql", $username, $password);
echo "Connected to database"; // check for connection
}
catch(PDOException $e)
{
echo $e->getMessage();
}
?>
または、以下のようにPHP PDOオブジェクトがすでに作成されている場合、使用するMySQLデータベースを選択できます。
使用説明書あり。ただし、ここで使用ステートメントはmysqlコマンドです。
try
{
$conn = new PDO("mysql:Host=$servername;", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->exec("use databasename");
//application logic
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
私のコードがリクエストに役立つことを願っています