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
相关产品推荐
相关产品推荐

