Интересно, как я могу получить список баз данных MySQL в PHP с использованием PDO без необходимости сначала подключаться к базе данных (я не имею в виду dbname в dsn)?
Обычно я использовал функцию mysql_list_dbs (), но я больше не использую mysql таким образом.
Вы можете использовать
show databases
или запрос на информационную страницу:
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:
Этот сценарий использует 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"; }