sql >> データベース >  >> RDS >> Mysql

PHPのPDOで使用するMySQLデータベースを選択するにはどうすればよいですか?

    通常、接続時にDSNでデータベースを指定します。ただし、新しいデータベースを作成する場合は、作成する前にそのデータベースにDSNを指定することはできません。

    USEを使用してデフォルトのデータベースを変更できます ステートメント:

    $dbh = new PDO("mysql:host=...;dbname=mysql", ...);
    
    $dbh->query("create database newdatabase");
    
    $dbh->query("use newdatabase");
    

    後続のCREATE TABLE ステートメントは新しいデータベースに作成されます。

    @Mikeからのコメント:

    いくつかのテストを行っただけですが、それが起こっているのはわかりません。データベースの変更はサーバー上でのみ行われ、クライアントでの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は、PDO ::ATTR_EMULATE_PREPARESがtrueの場合にのみ、指定された名前付きパラメーターを複数回使用できます。したがって、データベース変更の副作用としてこの属性がtrueに設定されていると言っている場合は、機能するはずです。

    ただし、機能しません。エミュレートされていないプリペアドステートメントが有効なままであることを示す「無効なパラメータ番号」というエラーが発生します。



    1. データベースバックアップ-MariaDBMariabackupとPerconaXtrabackupの比較

    2. 列の平均を計算し、それをOracleの選択クエリに含めるにはどうすればよいですか?

    3. SYSDATETIMEOFFSET()SQL Server(T-SQL)の例

    4. SQL Server Express Editionでストアドプロシージャを毎日実行するにはどうすればよいですか?