SQL语法在通过PHP运行时出错,但作为SQL查询运行正常

时间:2013-11-11 13:17:25

标签: 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 $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查询)时,执行的查询没有任何错误。

3 个答案:

答案 0 :(得分:3)

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

请尝试mysqli_multi_query

另外,动态创建表通常是更大设计问题的标志。模式应该是相对静态的,而数据应该是动态的。

答案 1 :(得分: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);
}

答案 2 :(得分:1)

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

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