【问题标题】:php - mysqli - create database if does not exist [duplicate]php - mysqli - 如果不存在则创建数据库[重复]
【发布时间】:2019-09-09 09:48:06
【问题描述】:

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

这是我非常简单的代码:

    <?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 块内的行。它不会创建数据库,也不会越过错误。

【问题讨论】:

  • 在连接中省略“db”,你不需要它,你为什么要尝试连接两次?您的捕获是针对错误的,您创建的 db 应该在 try 或新的 try catch 块中

标签: php mysqli


【解决方案1】:

你的问题是mysqli::__construct只有在无法连接数据库的情况下才会产生警告,你不能直接捕捉到警告。现在您可以解决这个问题(例如,请参阅 this question),但这样做可能更简单:

$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');
}

【讨论】:

  • @YourCommonSense 感谢分享,我不知道这个选项。您应该将其发布为答案,然后我可以删除它。
  • 我试过这段代码,它确实创建了数据库,但它在脚本中没有得到任何进一步的信息。它输出:Couldn't select database db: Unknown database 'db'No database selected
  • @dmikester1 抱歉,我忘记了创建数据库后选择数据库的代码。我现在已经编辑了。你应该看看 YourCommonSense 在第一条评论中分享的链接,它看起来可以让你的原始代码工作。
  • 完美!看起来从 YourCommonSense 的链接添加行也有效。但这是一个完整的答案。谢谢!
  • @dmikester1 很高兴它正在工作。我喜欢在这个网站上你可以通过回答问题和提问来学习东西的事实! :-)
【解决方案2】:
    //check if the database exist - PHP
    $cons = '';
    $cons = new mysqli("host", "user", "pass");
    $okk = mysqli_query($cons, "SHOW DATABASES LIKE 'db'");
    $okkno = mysqli_num_rows($okk);
    
    if($okkno <=0){
    $fanya = mysqli_query($cons, "CREATE DATABASE IF NOT EXISTS db;");
    echo "Database created successifully";
    }

【讨论】:

  • 你能解释一下这个答案对一个已经被接受的答案的 2 岁问题带来了什么吗?充其量它似乎试图回答标题中的字面问题,但没有考虑到探索潜在问题的来回 cmets
猜你喜欢
  • 2015-06-01
  • 2013-03-26
  • 1970-01-01
  • 2017-07-14
  • 2021-07-08
  • 1970-01-01
  • 2017-03-13
  • 1970-01-01
  • 2012-05-29
相关资源
最近更新 更多