在PHP中运行时出现SQL语法错误,但作为SQL查询运行正常

在PHP中运行时出现SQL语法错误,但作为SQL查询运行正常,php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,因此,导致错误的代码片段是: $con = mysqli_connect('localhost', 'root', '', 'notesDB'); if(isset($_POST['tableName'])) { $tName = htmlentities($_POST['tableName']); $firstQuery = mysqli_query($con,"INSERT into notes(Title) VALUES( '$tName'); CREATE TABLE

因此,导致错误的代码片段是:

$con = mysqli_connect('localhost', 'root', '', 'notesDB');

if(isset($_POST['tableName'])) {
    $tName = htmlentities($_POST['tableName']);

    $firstQuery = mysqli_query($con,"INSERT into notes(Title) VALUES( '$tName'); CREATE TABLE $tName(id int NOT NULL AUTO_INCREMENT, Title varchar(20) NOT NULL, Description varchar(100), PRIMARY KEY(id));");

    if($firstQuery){
        header("Location: create2.php");
    }
    else 
        echo mysqli_error($con);
}
其输出为:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE TABLE test1(id int NOT NULL AUTO_INCREMENT, Title varchar(20) NOT NULL, D' at line 1
好吧,有趣的是,确切的代码(除了变量-我刚刚删除了$sign)在phpMyAdmin中完美地执行


另外,为了证明php没有什么真正的错误,当查询只是插入查询(而不是创建查询)时,它会毫无错误地执行。

您试图在代码中一次运行两个单独的查询,但不能这样运行。您必须分别运行它们,如下所示:

$con = mysqli_connect('localhost', 'root', '', 'notesDB');

if(isset($_POST['tableName'])) {
    $tName = htmlentities($_POST['tableName']);

    $firstQuery = mysqli_query($con,"INSERT into notes(Title) VALUES( '$tName')");

$secondQuery = mysqli_query("CREATE        TABLE '$tName' (id int NOT NULL AUTO_INCREMENT, Title varchar(20) NOT NULL, Description varchar(100), PRIMARY KEY(id));");

    if($firstQuery || $secondQuery){
        header("Location: create2.php");
    }
    else 
        echo mysqli_error($con);
}

mysqli\u query
一次只能执行一个查询

试试看


作为旁白,动态创建表通常是更大设计问题的标志。架构应该是相对静态的,而数据应该是动态的。

您的数据库体系结构是错误的。
您不应该动态创建表。因此,您只需使用简单的常规插入查询注册任何新实体。然后使用该实体的id链接来自另一个[已存在]表的记录

if(isset($_POST['tableName'])) {
    $stm = mysqli_prepare($con,"INSERT into notes(Title) VALUES(?)");
    $stm->bind_param("s",$_POST['tableName']);
    $stm->execute();
}

“另外,为了证明php没有什么真正的错误,当它只是插入查询(而不是创建查询)时,查询执行时没有任何错误。”这并不能证明php是正确的;这只是证明了PHP的问题在于您正在生成SQL的
CREATE TABLE
部分。您不能在一个
mysqli\u查询中运行两个单独的查询。更新了我的答案,现在请检查一下。我实际上是个新手:3谢谢,不过:)非常感谢!你说的静态模式到底是什么意思?我认为,通过在所有表中保持列名相同,模式将相对静态。这是一个帮助我理解数据库、PHP和SQL的项目,所以我是一个彻头彻尾的noob。我想我理解了你的意思。谢谢非常感谢你的回答!谢谢你的提示!我现在会做更多的研究!