Ответ 1
Вы можете использовать
show databases
или запрос на information_schema:
select schema_name from information_schema.schemata
Интересно, как я могу получить список баз данных MySQL в PHP с использованием PDO без необходимости сначала подключаться к базе данных (я не имею в виду dbname в dsn)?
Обычно я использовал функцию mysql_list_dbs(), но я больше не использую mysql таким образом.
Вы можете использовать
show databases
или запрос на information_schema:
select schema_name from information_schema.schemata
Спасибо ник rulez. Я привел пример списка БД:
$user = 'root';
$pass = 'root';
$server = 'localhost';
$dbh = new PDO( "mysql:host=$server", $user, $pass );
$dbs = $dbh->query( 'SHOW DATABASES' );
while( ( $db = $dbs->fetchColumn( 0 ) ) !== false )
{
echo $db.'<br>';
}
Другой метод, похожий на Falcon's:
Этот script использует foreach вместо while и печатает вместо echo для имен db, и тег break устанавливается так, как он будет использоваться с XML. Он также использует ассоциативное свойство, имя столбца, а не индекс массива столбца в возвращаемой строке для отображения желаемого результата.
Предполагается, что вы правильно настроили соединение PDO и = $dbconn. В примерах вместо $dbconn используется много раз $db.
$stmt ="SHOW DATABASES";
foreach($dbconn->query($stmt) as $row){
print $row['Database'];echo"<br />";
}
try{
$DBH = new PDO("mysql:host=localhost", "root", "");
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$DBH->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}catch(PDOException $e) {
echo "Fail";
}
$rs = $dbo->query("SHOW DATABASES");
while ($h = $rs->fetch(PDO::FETCH_NUM)) {
echo $r[0]."<br>";
}
В PHP версии 5.4.0 вы можете использовать команду mysql_list_dbs()
:
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
$db_list = mysql_list_dbs($link);
while ($row = mysql_fetch_object($db_list))
{
echo $row->Database . "\n";
}