php-mysqli-create数据库(如果不存在)

php-mysqli-create数据库(如果不存在),php,mysqli,Php,Mysqli,我正在使用PHP和mysqli,并尝试创建数据库,如果它不存在于我的dbLogin文件中。看起来这应该是一件相当简单的事情。它似乎在第一次尝试创建时遇到了一个错误,无法越过或捕获错误 下面是我非常简单的代码: <?php $con = ''; try { $con = new mysqli("host", "user", "pass", "db"); } catch(Exception $e) { echo "Er

我正在使用PHP和mysqli,并尝试创建数据库,如果它不存在于我的dbLogin文件中。看起来这应该是一件相当简单的事情。它似乎在第一次尝试创建时遇到了一个错误,无法越过或捕获错误

下面是我非常简单的代码:

    <?php

    $con = '';

    try {
        $con = new mysqli("host", "user", "pass", "db");
    }
    catch(Exception $e) {
        echo "Error: $e<br />";
        $con = new mysqli("host", "user", "pass");
        $con->query("CREATE DATABASE IF NOT EXISTS db;");
    }
    /* check connection */
    if ($con->connect_errno) {
        printf("Connect failed: %s\n", $con->connect_error);
        exit();
    }

?>

现在,当我运行上述代码时,得到的只是以下错误:

警告:mysqli::_construct():(HY000/1049):未知数据库 第6行连接上xyz\DBLogin.php中的“db” 失败:未知数据库“db”


第6行是
try
块内的行。它不会创建数据库,也不会越过错误。

您的问题是
mysqli::\u construct
仅在无法连接到数据库时生成警告,并且您无法直接捕获警告。现在您可以解决这个问题(例如,请参见),但这样做可能更简单:

$con = new mysqli("host", "user", "pass");
if ($con->connect_errno) {
    printf("Connect failed: %s\n", $con->connect_error);
    exit();
}
if (!$con->select_db('db')) {
    echo "Couldn't select database: " . $con->error;
    if (!$con->query("CREATE DATABASE IF NOT EXISTS db;")) {
        echo "Couldn't create database: " . $con->error;
    }
    $con->select_db('db');
}

您的问题是,
mysqli::\u construct
仅在无法连接到数据库时生成警告,并且您无法直接捕获警告。现在您可以解决这个问题(例如,请参见),但这样做可能更简单:

$con = new mysqli("host", "user", "pass");
if ($con->connect_errno) {
    printf("Connect failed: %s\n", $con->connect_error);
    exit();
}
if (!$con->select_db('db')) {
    echo "Couldn't select database: " . $con->error;
    if (!$con->query("CREATE DATABASE IF NOT EXISTS db;")) {
        echo "Couldn't create database: " . $con->error;
    }
    $con->select_db('db');
}

在连接中省略“db”,你不需要它,为什么你要尝试连接两次?您的捕获是针对错误的,您应该在try或新的try-catch块中创建db从连接中删除“db”,您不需要它,为什么要尝试连接两次?您的捕获是针对错误的,您应该在try或新的try捕获中创建dbblock@YourCommonSense谢谢分享,我不知道有这个选择。你应该把它作为一个答案发布,然后我可以删除它。我尝试了这段代码,它确实创建了数据库,但在脚本中没有得到任何进一步的内容。它输出以下内容:
无法选择数据库db:Unknown database'db'No database selected
@dmikester1很抱歉,创建数据库后,我忘记了选择数据库的代码。我现在已经编辑好了。你应该看看你的常识在第一条评论中共享的链接,它看起来可以让你的原始代码正常工作。太棒了!看起来从YourCommonSense的链接中添加这行代码也很有效。但这是一个有效的完整答案。谢谢@dmikester1很高兴它起作用了。我喜欢这样一个事实:在这个网站上,你可以通过回答问题和提问来学习东西!:-)@你的常识谢谢你分享,我不知道这个选择。你应该把它作为一个答案发布,然后我可以删除它。我尝试了这段代码,它确实创建了数据库,但在脚本中没有得到任何进一步的内容。它输出以下内容:
无法选择数据库db:Unknown database'db'No database selected
@dmikester1很抱歉,创建数据库后,我忘记了选择数据库的代码。我现在已经编辑好了。你应该看看你的常识在第一条评论中共享的链接,它看起来可以让你的原始代码正常工作。太棒了!看起来从YourCommonSense的链接中添加这行代码也很有效。但这是一个有效的完整答案。谢谢@dmikester1很高兴它起作用了。我喜欢这样一个事实:在这个网站上,你可以通过回答问题和提问来学习东西!:-)