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
'programing' 카테고리의 다른 글
링크 도커 컨테이너(Drupal 및 MariaDB) (0) | 2023.09.27 |
---|---|
구별을 사용하여 표에서 고유 레코드를 하나만 선택하는 방법 (0) | 2023.09.27 |
기본 클래스에서 파생 클래스를 동적으로 만드는 방법 (0) | 2023.09.27 |
문자열의 HmacSHA256 서명을 생성하는 방법 (0) | 2023.09.17 |
스택 오버플로우처럼 고객이 웹사이트에서 openid를 사용할 수 있도록 하려면 어떻게 해야 합니까? (0) | 2023.09.17 |