Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查数据库是否存在_Php_Mysql - Fatal编程技术网

Php 检查数据库是否存在

Php 检查数据库是否存在,php,mysql,Php,Mysql,下面的代码工作正常,只是在连接到不存在的数据库时抛出警告。这在关闭错误的产品中很好,但如果不需要,我宁愿没有错误 function cpanel_db_connect($dbname) { // normalize $dbname = convert_to_slug($dbname); $dbname = CPANEL_USER . '_' . $dbname; $dbuser = CPANEL_USER . '_' . CPANEL_DB_USER;

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

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;
}

以上工作

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

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

从信息\u SCHEMA.SCHEMATA WHERE SCHEMATA.SCHEMA\u NAME='my\u database\u NAME'中选择COUNT(*)作为'exists'
然后,您可以检查键的值
exists
,查看数据库是否存在

下面是一个示例代码:

//要执行的语句
$sql='从SCHEMATA.SCHEMATA WHERE SCHEMATA.SCHEMA_NAME=“my_database_NAME”信息中选择COUNT(*)作为'exists';
//执行该语句
$query=$mysqli->query($sql);
//提取值
$row=$query->fetch_object();
$dbExists=(bool)$row->exists;

它稍微长一点,但更安全。

这样做有效,只需在以下代码中替换$dbname即可:

if (empty (mysql_fetch_array(mysql_query("SHOW DATABASES LIKE '$dbname' ")))){
echo "DB does Not exist"; }else{    echo "DB  exists!";}
更新到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>";
}
$conn=newmysqli('localhost','root','');
$dbname='test';
if(空(mysqli_fetch_数组(mysqli_查询($conn,“显示像“$dbname”这样的数据库)))
{
回声“DB不存在
”; } 其他的 { 回声“DB存在
”; }
您可以使用
@
操作符简单地抑制错误,例如
$mysqli=@newmysqli(CPANEL\u DB\u HOST、$dbuser、CPANEL\u DB\u PASS、$dbname)
由于您使用的是mysqli的OOP版本,只需在connect部分进行尝试/捕获。您会收到什么警告/错误?@Marc,
mysqli
不会在connect上引发异常。您必须通过返回对象上的
connect\u error
检查错误。您可能希望使用专用登录来调查这类问题,并直接查询信息模式数据库:
从信息模式中选择模式名称。模式模式中的模式名称=“此处的数据库名称”
比尝试连接到(可能不存在)数据库并检查错误要好。
$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>";
}