programing

PHP에서 PDO와 함께 사용할 MySQL 데이터베이스를 선택하려면 어떻게 해야 합니까?

javamemo 2023. 9. 27. 16:47
반응형

PHP에서 PDO와 함께 사용할 MySQL 데이터베이스를 선택하려면 어떻게 해야 합니까?

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를 부적절하게 사용하려는 것은 아닐까요?도와주시거나 설명해주시기 바랍니다.

편집

새 데이터베이스를 만들기 위해 PDO를 사용하지 않아야 합니까?PDO를 사용함으로써 얻을 수 있는 대부분의 이점은 다음과 같은 데이터를 삽입하지 않는 거의 사용되지 않는 작업에서 손실된다는 것을 알고 있습니다.CREATE DATABASE, 그러나 데이터베이스를 만들기 위해 다른 연결을 사용한 다음 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_PREADE는 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로 설정되어 있다면 이 특성이 작동해야 합니다.

그러나 작동하지 않습니다. "Invalid parameter number"라는 오류가 발생하여 에뮬레이트되지 않은 준비된 문이 계속 유효하다는 것을 나타냅니다.

PDO 개체를 만들 때 데이터베이스를 설정해야 합니다.예제(여기서부터)

<?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 데이터베이스를 선택할 수 있습니다.

USE STATEMENT. 하지만 여기 USE STATEMENT is 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;

내 코드가 요청에 도움이 되기를 바랍니다.

각 연결마다 새로운 개체를 생성해야 하는 것으로 알고 있습니다.여러 데이터베이스에 연결하는 메서드를 사용하여 항상 PDO 클래스를 확장할 수 있습니다.그런 다음 원하는 대로 사용합니다.

public function pickDatabase($db) {
  if($db == 'main') {
    return $this->db['main']; //instance of PDO object
  else
    return $this->db['secondary']; //another instance of PDO object
}

은 처럼.$yourclass->pickDatabase('main')->fetchAll('your stuff');

언급URL : https://stackoverflow.com/questions/8705195/how-do-i-select-a-mysql-database-to-use-with-pdo-in-php

반응형