所以我有一个包含以下列的数据库表:
ID
Foo
Bar
Gux
Foo 可以保存值 [a, b, c],Bar [1, 2, 3] 和 Gux [x, y, z]。
在我的界面中,我有一个 HTML 选择框来过滤 Foo、Bar 和 Gux。问题是用户可以按随机顺序过滤一个、两个或三个参数。
这给了我一个问题来制作一个有效的 SQL 查询和 bind_param。
我可以这样做:
//Pseudo code
$sql = "";
if (isset($_GET['foo'])) {
$sql = "SELECT * FROM ... WHERE foo=?";
}
if (isset($_GET['bar'])) {
$sql = "SELECT * FROM ... WHERE bar=?";
}
if (isset($_GET['gux'])) {
$sql = "SELECT * FROM ... WHERE gux=?";
}
但是如果使用选择的 foo 和 bar 呢?这也将非常丑陋并且也难以实现 bind_params。
理想将是一个通配符,所以我可以做
//Pseudo code
$sql = "SELECT * FROM ... WHERE foo=* AND bar=* AND gux=*";
*并且只有在为该列选择过滤器时才用实际值替换。但这不支持整数。
我想到的另一种选择是执行以下操作:
//Pseudo code
$sql = "SELECT * FROM ... WHERE foo=filter1 OR bar=filter2 OR gux=filter3";
并在选择该列的值时以编程方式替换OR为。AND这也将解决 bind_param 问题。但我不知道这是否是最好的方法。
回首忆惘然