【问题标题】:Executing MySQL Query from PHP error从 PHP 错误执行 MySQL 查询
【发布时间】:2010-09-10 17:25:54
【问题描述】:

我的这部分代码通过以下方式创建了一个多重查询:

$sql = "";

$sql .= "INSERT INTO projects
        (project_id, project_name, project_description, project_deadline, project_status, project_priority)
        VALUES ('" . $project_id . "', '" . $name . "', '" . $description . "', '" . $final_deadline . "', '" . $status . "', '" . $priority . "');";

foreach($assignments as $assigned_user)
{
    $sql .= "INSERT INTO assignments 
             (user_id, project_id, assigned_date) 
             VALUES ('" . $assigned_user . "', '" . $project_id . "', '" . time() . "');";
}

$result = mysql_query($sql) or die(mysql_error());

但是,我得到一个错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的“INSERT INTO assignments (user_id, project_id,assigned_date)”附近使用正确的语法

然而,如果我回显$sql,结果是这样的:

INSERT INTO projects (project_id, project_name, project_description, project_deadline, project_status, project_priority) VALUES ('7090', 'Sup :D', 'OMG!', '716770800', '1', '1');
INSERT INTO assignments (user_id, project_id, assigned_date) VALUES ('12', '7090', '1284139311');
INSERT INTO assignments (user_id, project_id, assigned_date) VALUES ('11', '7090', '1284139311');

THEN我手动将SQL执行到PhpMyAdmin中,运行正常,但是PHP执行后怎么就不行了,输出错误呢?

【问题讨论】:

  • PhpMyAdmin 划分查询并分别执行

标签: php sql mysql mysql-error-1064


【解决方案1】:

mysql_query一次只能执行一个查询

试试这个:

$sql = "INSERT INTO projects
        (project_id, project_name, project_description, project_deadline, project_status, project_priority)
        VALUES ('" . $project_id . "', '" . $name . "', '" . $description . "', '" . $final_deadline . "', '" . $status . "', '" . $priority . "');";
$result = mysql_query($sql) or die(mysql_error());

foreach($assignments as $assigned_user)
{
    $sql = "INSERT INTO assignments 
             (user_id, project_id, assigned_date) 
             VALUES ('" . $assigned_user . "', '" . $project_id . "', '" . time() . "');";
    $result = mysql_query($sql) or die(mysql_error());
}

【讨论】:

  • Aw...那么我该如何执行多个查询?
  • 分别执行每个查询。或者使用 sled 的建议。
【解决方案2】:

mysql_query 函数不支持多个查询。检查 mysqli::multi_query

http://php.net/manual/en/mysqli.multi-query.php

【讨论】:

    【解决方案3】:

    兄弟,学习 SQL,它会规则;)

    $sql = "INSERT INTO assignments 
                 (user_id, project_id, assigned_date) ";
    
    foreach($assignments as $assigned_user)
    {
      $sql.= " VALUES ('" . $assigned_user . "', '" . $project_id . "', '" . time() . "') ";
    }
    

    我希望你所有的变量都被转义了。

    【讨论】:

      【解决方案4】:

      我的猜测是 mysql_query 函数不允许执行多条语句,每条语句都需要单独执行。

      不过,纵观全局,请考虑以下帖子:Overwriting data in a MySQL table。总之,通过连接字符串来构建查询是灾难的根源,您将容易受到 SQL 注入攻击和其他错误的攻击。考虑使用 PDO 抽象层而不是调用 mysql 特定的函数,并考虑使用参数化查询而不是像你正在做的那样构建字符串。

      这是初学者常犯的标准错误(网上的大量示例和指导不佳的书籍没有帮助)所以如果你是初学者不要为此感到难过,请记住你不应该使用生产系统中的这种方法。

      【讨论】:

        猜你喜欢
        • 2014-03-18
        • 2012-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-11
        • 2016-01-18
        相关资源
        最近更新 更多