检查数据库是否存在(mysql + php)

时间:2011-05-16 20:58:52

标签: php mysql

下面的代码工作正常,但在连接到不存在的数据库时会抛出警告。这在错误关闭的产品中工作正常,但如果我不需要,我宁愿没有错误。

function cpanel_db_connect($dbname) {
    // normalize
    $dbname = convert_to_slug($dbname);
    $dbname = CPANEL_USER . '_' . $dbname;

    $dbuser = CPANEL_USER . '_' . CPANEL_DB_USER;

    // connnect database
    $mysqli = new mysqli(CPANEL_DB_HOST, $dbuser, CPANEL_DB_PASS, $dbname);

    if ($mysqli->connect_error) {
        return false;
    }

    return $mysqli;
}

4 个答案:

答案 0 :(得分:3)

我知道答案有点太迟了,而且已经有人接受了答案,但我会留下评论以防将来有人需要。

使用PHP中的@符号来抑制警告/错误不是一个好习惯。您可能会意外地抑制无效的用户名或密码消息,而您永远不会知道它。

检查数据库是否存在的更合适的方法是创建Mysql或Mysqli的新实例(不指定默认数据库)并执行以下查询(类似于Marc B的注释):

SELECT COUNT(*) AS `exists` FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMATA.SCHEMA_NAME='my_database_name'

然后,您可以检查密钥exists的值,以查看数据库是否存在。

以下是示例代码:

// statement to execute
$sql = 'SELECT COUNT(*) AS `exists` FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMATA.SCHEMA_NAME="my_database_name"';

// execute the statement
$query = $mysqli->query($sql);
if ($query === false) {
    throw new Exception($mysqli->error, $mysqli->errno);
}

// extract the value
$row = $query->fetch_object();
$dbExists = (bool) $row->exists;

它有点长,但更安全。

答案 1 :(得分:2)

这样做,只需在此代码中替换$ dbname:

if (empty (mysql_fetch_array(mysql_query("SHOW DATABASES LIKE '$dbname' ")))){
echo "DB does Not exist"; }else{    echo "DB  exists!";}

答案 2 :(得分:1)

$mysqli = @new mysqli(CPANEL_DB_HOST, $dbuser, CPANEL_DB_PASS, $dbname);

以上作品!

答案 3 :(得分:0)

更新为MYSQLI:

$conn = new mysqli('localhost', 'root', '');
$dbname='test';
if (empty (mysqli_fetch_array(mysqli_query($conn,"SHOW DATABASES LIKE '$dbname'")))) 
{
    echo "DB not exist<br>"; 
}
else
{
    echo "DB exist<br>";
}
相关问题