嵌套查询的SQL语法错误

时间:2014-09-19 09:56:44

标签: mysql sql

我正在维护一个在mysql查询上抛出一些sql错误的旧网站。错误如下......

 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 'OR syprc_serial IN (SELECT b.syprc_serial FROM syproductcategories.b WHERE b.syp' at line 1

我怀疑这与我的嵌套选择的语法有关,虽然我还没有成功解决这个问题!任何人都有一些见解

$query = "SELECT syprc_serial, syprd_serial, sypcd_description, sypdd_title, sypdd_shortdescription, sypdd_longdescription, sypdd_primarypackage, sypdd_owner, syprd_image01, syprc_subcategoryof ".
     "FROM syproductcategories, syproductcategoriesdescription, syproducts, syproductsdescription ".
     "WHERE syprc_serial = sypcd_productcategoryserial ".
     "AND syprd_categoryserial = syprc_serial ".
     "AND sypdd_languagecode = '". $_SESSION['language']."' ".
     "AND sypcd_languagecode = '". $_SESSION['language']."' ".
     "AND syprd_serial = sypdd_productserial ".
     "AND syprc_companyserial = '" . $_SESSION['company'] ."' ".
     "AND syprd_companyserial = '" . $_SESSION['company'] ."' ".
     "AND syprd_active = 1 ".
     "AND (syprc_serial = $syprc_serial ".
        "OR syprc_serial IN (SELECT b.syprc_serial FROM syproductcategories b WHERE b.syprc_subcategoryof = $syprc_serial) ".
        "OR syprc_subcategoryof IN (SELECT b.syprc_serial FROM syproductcategories b WHERE b.syprc_subcategoryof = $syprc_serial) ".
    ") ".
    "ORDER BY syprc_serial, sypdd_title, syprd_serial";

1 个答案:

答案 0 :(得分:1)

语法对我来说很好。无论$ _SESSION ['语言']和$ _SESSION ['公司']中的任何内容都将被放入字符串文字中。但是$ syprc_serial不会。因此,$ syprc_serial很可能不包含数字。

  • 应该发生这种情况:WHERE b.syprc_subcategoryof = 123)
  • 而这不是:WHERE b.syprc_subcategoryof = ABC)
  • 这两个都没有:WHERE b.syprc_subcategoryof = )
  • 甚至可以:WHERE b.syprc_subcategoryof = (),-_;)

syprc_subcategoryof的列类型是什么?如果它是一个字符串,那么用引号括起来,就像你对会话变量一样。否则只需确保变量包含数字。

这些事情很容易被发现:打印最终声明。如果您没有立即看到错误,请直接将其与dbms一起使用。移除并添加部件,直至其工作。