解析错误:语法错误,意外的T_STRING。 。 。 。在第17行

时间:2013-11-23 17:54:02

标签: php mysql

我正在尝试创建一个将放入foreach语句的字符串。该字符串将确定将从数据库中显示哪些字段。由于我无法确定事先从表单中选择哪些字段,我认为这是处理未知并显示查询结果的最佳方法。

我以相同的方式构建查询并且它有效。我尝试过双引号和单引号,我只是不明白它为什么不想构建这个字符串。请帮助(对不起,如果这是一个愚蠢的问题,因为我是PHP的新手 - 我可以在类似的搜索中找到匹配的答案)。谢谢! : - )

<?php
  include('database.php');


  function show_products($table, $productIDcb, $categoryIDcb, $productCodecb, $productNamecb, $listPricecb)
  {
        $list = "";
        global $db;
        $theQuery = 'select ';
        if($productIDcb == "")
         {
                $theQuery == $theQuery;
         }
        else
         {
                $theQuery .= 'productID, ';
                $list .=' $products['productID']';  //THIS IS LINE 17
         }
        if($categoryIDcb == "")
         {
                $theQuery == $theQuery;
         }
        else
         {
                $theQuery .= 'categoryID, ';
                $list .=' $products['categoryID']';

         }
        if($productCodecb == "")
         {
                $theQuery == $theQuery;
         }
        else
         {
                $theQuery .= 'productCode, ';
                $list .=' $products['productCode']';

         }
        if(isset($_POST['productNamecb']))
         {
                $theQuery == $theQuery;
         }
        else
         {
                 $theQuery .= 'productName, ';
                 $list .=' $products['productName']';
         }
        if(isset($_POST['listPricecb']))
         {
                $theQuery .= 'listPrice, ';
         }
        else
         {
                $theQuery .= 'listPrice, ';
                $list .=' $products['listPrice']';
         }

        $theQuery .=' "" from ' .$table;
        echo($theQuery);
        $rSet = $db -> query($theQuery);
        foreach($rSet AS $products)
          {
              $list .= "<br>";
          }
        echo($list);
  }



?>

2 个答案:

答案 0 :(得分:2)

你使用单引号两次

$list .=' $products['productID']';

尝试对字符串使用不同的引号:例如,

$list .=" $products['productID']"; //这将产生一个看起来像

的字符串

$products['productID']

当编译器在字符串'的开头遇到引号时,它希望另一个引号关闭它。在原始代码中,第二个引号会过早显示,使您的字符串变为

' $products['

使下一部分对编译器来说变得难以理解

productID']'

此外,如果您想在字符串中包含变量,则需要双引号",而不是单'

最后, 您无法直接在带引号的字符串中访问数组 。尝试连接:

$list .=' ' . $products['productID'];

<强> *修改

关于@marcelkorpel建议的说明。您可以使用花括号,但注释中有一个小错字。请使用

"{$products['productID']}"而非"${products['productID']}"

答案 1 :(得分:2)

第17行中的错误是单引号:

$list .=' $products['productID']';  //THIS IS LINE 17

应该是

$list .=$products['productID'];  //THIS IS LINE 17

旁注: 我也建议这个改变:

 if(!$productIDcb == "") //notice the negation operator here: '!'
         {
                $theQuery .= 'productID, ';
                $list .=$products['productID'];  //THIS IS LINE 17
         }

并在其他类似的地方做出同样的改变。