You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP操作MySQL需两次刷新才能创建库中表的问题如何解决

问题根因

首次运行代码时,初始执行mysqli_select_db选库失败后,你只执行了创建数据库的逻辑,创建完成后没有主动将当前连接切换到刚创建的enquiry库,所以后续建表语句没有指定操作的数据库,触发No database selected报错。第二次刷新页面时数据库已存在,初始的选库逻辑执行成功,建表才会正常运行。

修复代码

只需要在创建数据库成功的分支中,补充选库逻辑即可:

<?php
    DEFINE ('DB_USER', 'root');
    DEFINE ('DB_PASSWORD', '');
    DEFINE ('DB_HOST', 'localhost');
    DEFINE ('DB_NAME', 'enquiry');

    $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD);

    // 尝试选中数据库
    $db_selected = mysqli_select_db($dbc, DB_NAME);

    if (!$db_selected) {
        // 数据库不存在则创建
        $sql = 'CREATE DATABASE '.DB_NAME;
        if (mysqli_query($dbc, $sql)) {
            echo "Database enquiry created successfully";
            // 新增:创建完成后立即选中该数据库
            mysqli_select_db($dbc, DB_NAME);
        } else {
            echo 'Error creating database: ' . mysqli_error($dbc);
        }
    }

    if ($dbc){
        echo "Connected to database";
    } else {
        echo "Could not connect to database";
    }

    $create_table = "CREATE TABLE enquiry (
                                            id INT PRIMARY KEY AUTO_INCREMENT,
                                            first_name VARCHAR(20),
                                            last_name VARCHAR(35),
                                            email VARCHAR(255) NOT NULL,
                                            phone INT,
                                            street_address TEXT,
                                            city VARCHAR(25),
                                            state VARCHAR(25),
                                            postcode INT,
                                            subject VARCHAR(255),
                                            service VARCHAR(20),
                                            comment TEXT
                                        )";

    
    if (mysqli_query($dbc, $create_table)) {
        echo "Table Enquiry created successfully";
    } else {
        echo "Error creating table: " . mysqli_error($dbc);
    }

    mysqli_close($dbc);
?>

可选优化:建表语句可以直接指定库名,写法为CREATE TABLE IF NOT EXISTS enquiry.enquiry (字段定义),即使当前连接没有选中库也能正常执行。

内容的提问来源于stack exchange,提问作者Hon Wi Cong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:06:04