我正在维护一个在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";
答案 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一起使用。移除并添加部件,直至其工作。