【问题标题】:MYSQL select from product table using filter stored in seperate tableMYSQL 使用存储在单独表中的过滤器从产品表中选择
【发布时间】:2017-02-03 15:15:15
【问题描述】:

我有一个包含两个重要表的数据库。一张表包含我们的整个产品目录。另一个是从后端面板中选择的用于搜索的过滤器列表。由于某种原因,这在执行时显示空白屏幕。我很确定我很愚蠢并且错过了一些愚蠢的东西。

MYSQL 日志显示

SELECT * FROM product_list WHERE product_list.PRODUCT_NAME IN ('\'product1\' OR \'product2\' //etcetc

有人有什么想法吗?我的脚本如下:

echo "<table class='inventorydata'><tr><td>SKU</td><td></td><td>Title</td><td>Quanitity</td></tr><tr><td colspan='4'></td></tr>";
//table header

$filterproducts = $dbh->prepare("SELECT * FROM table_filter_selection ORDER BY filter ASC");
$filterproducts->execute();
$filterselect = $filterproducts->fetchAll();
//select all set filters from the table

$filteroptions = "'";
foreach($filterselect as $filterRow){
$filteroptions .= $filterRow['filter'] . "' OR '";
}
//set filters in to a string

$truesearch = $dbh->prepare("SELECT * FROM product_list WHERE product_list.PRODUCT_NAME IN (:filterchoice)");
$truesearch->bindParam(":filterchoice", $filteroptions, PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$truesearch->execute();
//use filters set as parameters for searching through products

foreach($truesearch as $rows){
echo "<tr><td>" . $rows['SKU'] ."<td/><td>". $rows['PRODUCT_NAME'] ."</td><td>". $rows['QTY'] . "</td></tr>";
}
//display products

echo "</table>";

【问题讨论】:

  • 首先,检查你服务器上的错误日志,有什么东西吗?其次,如果您在脚本中设置断点并单步执行,您会发现任何问题吗?
  • 您能否扩展您希望“truesearch”查询的外观?现在看起来您正在构建一个字符串并在值之间添加' OR '。然后,您尝试在 PRODUCT_NAME 列中查找该字符串。使用准备好的语句时,您不能添加这样的 SQL 语句。它不会连接语句,它会将其用作文字字符串。
  • 伪:从产品列表中选择所有产品。 Truesearch 是查找与通过 ":filterchoice" 放入的一个或多个过滤器匹配的所有行。一旦选择了行,就可以将它们输出到 html 表的一行中。当我意识到我使用了一个愚蠢的 var 名称时进行了编辑。

标签: php mysql database filter


【解决方案1】:

我暂时通过循环每个过滤器并打开每个循环的连接来解决这个问题。不是最漂亮的,但暂时可以。谢谢你的帮助。

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 2010-12-10
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多