使用PHP+MySQL8创建数据库和表时出现语法错误如何解决
问题原因
mysqli_query()默认仅支持单次执行单条SQL语句,你修改后的$queryCrTb同时包含了USE user_records;和CREATE TABLE两条SQL,直接传入mysqli_query会触发语法报错。- 最初的写法是两条SQL之间没有加分号分隔,也没有切换到新建的数据库就直接建表,所以也会报错。
解决方法
方案1:拆分所有SQL为单条单独执行(更稳妥,推荐)
<?php $hostname = 'localhost'; $username = 'root'; $password = ''; $connectDB = mysqli_connect($hostname, $username, $password); if (!$connectDB) { die('Connection failed: ' . mysqli_connect_error()); } // 1. 单独执行建库语句 $queryCrDB = "CREATE DATABASE IF NOT EXISTS user_records;"; if (mysqli_query($connectDB, $queryCrDB)) { echo '<div class="alertSuccess"><span>数据库创建成功</span></div>'; } else { echo '<div class="alertError"><span>数据库创建失败: <i>' . mysqli_error($connectDB) . '</i></span></div>'; } // 2. 单独执行切换数据库语句 mysqli_query($connectDB, "USE user_records;"); // 3. 单独执行建表语句 $queryCrTb = "CREATE TABLE records_list ( id INT(5) NOT NULL PRIMARY KEY AUTO_INCREMENT, username VARCHAR(30) NOT NULL UNIQUE, userpass VARCHAR(30) NOT NULL);"; if (mysqli_query($connectDB, $queryCrTb)) { echo '<div class="alertSuccess"><span>数据表创建成功</span></div>'; } else { echo '<div class="alertError"><span>数据表创建失败: <i>' . mysqli_error($connectDB) . '</i></span></div>'; } ?>
补充说明:建库语句加
IF NOT EXISTS是为了避免重复运行代码时,因为数据库已存在触发报错。
方案2:使用mysqli_multi_query()执行多条SQL(适合需要一次性执行多条语句的场景)
如果不想拆分SQL,可以把原来执行$queryCrTb的mysqli_query替换为支持多语句执行的mysqli_multi_query即可:
// 建库逻辑保持不变,建库成功后执行下面的代码 $queryCrTb = "USE user_records; CREATE TABLE records_list ( id INT(5) NOT NULL PRIMARY KEY AUTO_INCREMENT, username VARCHAR(30) NOT NULL UNIQUE, userpass VARCHAR(30) NOT NULL);"; if (mysqli_multi_query($connectDB, $queryCrTb)) { echo '<div class="alertSuccess"><span>数据表创建成功</span></div>'; } else { echo '<div class="alertError"><span>数据表创建失败: <i>' . mysqli_error($connectDB) . '</i></span></div>'; }
内容的提问来源于stack exchange,提问作者Hiếu Vi
相关产品推荐
相关产品推荐

