我正在尝试创建一个将放入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);
}
?>
答案 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
}
并在其他类似的地方做出同样的改变。