为什么我收到数据类型不匹配错误?

时间:2019-06-28 05:05:26

标签: php postgresql

  

SQLSTATE [42804]:数据类型不匹配:7错误:WHERE的参数必须为   输入布尔值,而不输入整数LINE 1

    $sql = "SELECT mod_modulegroupcode, mod_modulegroupname FROM module "
            . " WHERE 1 GROUP BY `mod_modulegroupcode` "
            . " ORDER BY `mod_modulegrouporder` ASC, `mod_moduleorder` ASC  ";


    $stmt = $DB->prepare($sql);
    $stmt->execute();
    $commonModules = $stmt->fetchAll();

    $sql = "SELECT mod_modulegroupcode, mod_modulegroupname, mod_modulepagename,  mod_modulecode, mod_modulename FROM module "
            . " WHERE 1 "
            . " ORDER BY `mod_modulegrouporder` ASC, `mod_moduleorder` ASC  ";

    $stmt = $DB->prepare($sql);
    $stmt->execute();
    $allModules = $stmt->fetchAll();

    $sql = "SELECT rr_modulecode, rr_create,  rr_edit, rr_delete, rr_view FROM role_rights "
            . " WHERE  rr_rolecode = :rc "
            . " ORDER BY `rr_modulecode` ASC  ";

    $stmt = $DB->prepare($sql);
    $stmt->bindValue(":rc", $_SESSION["rolecode"]);


    $stmt->execute();
    $userRights = $stmt->fetchAll();

1 个答案:

答案 0 :(得分:0)

您将收到数据类型不匹配错误,因为SQL语句的where子句希望您提供条件,而不是整数值。您的第三个查询的where子句有一个条件,但是前两个查询仅尝试给出一个整数值。 1在某些编程语言中被视为“ true”,但是SQL并不是其中的一种。

鉴于您正在将SQL与代码组装在一起,如果没有条件可提供where子句,则只需将where子句排除在外,就像这样:

    $sql = "SELECT mod_modulegroupcode, mod_modulegroupname FROM module "
            . " GROUP BY `mod_modulegroupcode` "
            . " ORDER BY `mod_modulegrouporder` ASC, `mod_moduleorder` ASC  ";

但是,由于mod_modulegroupname未聚合,您将遇到问题。由于您没有进行任何汇总,因此我建议也删除GROUP BY子句。您还应该消除order by中的反引号。这会让您:

    $sql = "SELECT mod_modulegroupcode, mod_modulegroupname FROM module "
            . " ORDER BY mod_modulegrouporder ASC, mod_moduleorder ASC  ";

如果我可以这么说,听起来您应该做一个SQL教程。