-3

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

$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

好吧,有趣的是,确切的代码(除了变量——我刚刚删除了 $ 符号)在 phpMyAdmin 中完美执行。

此外,为了证明 php 没有任何问题,当它只是 INSERT 查询(而不是 CREATE 查询)时,查询执行时没有任何错误。

4

3 回答 3

3

mysqli_query一次只能执行一个查询。

试试mysqli_multi_query吧。

顺便说一句,动态创建表格通常是更大设计问题的标志。模式应该是相对静态的,而数据应该是动态的。

于 2013-11-11T13:23:48.240 回答
1

您试图在代码中一次运行两个单独的查询,而您不能那样运行。您必须像下面这样单独运行它们:

$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);
}
于 2013-11-11T13:20:56.650 回答
1

您的数据库架构是错误的。
您不应该即时创建表格。因此,您只需使用简单的常规 INSERT 查询注册任何新实体。然后使用该实体的 id 链接另一个 [已经存在] 表中的记录。

if(isset($_POST['tableName'])) {
    $stm = mysqli_prepare($con,"INSERT into notes(Title) VALUES(?)");
    $stm->bind_param("s",$_POST['tableName']);
    $stm->execute();
}
于 2013-11-11T13:24:22.717 回答