【发布时间】:2021-04-14 01:24:40
【问题描述】:
我想从我的数据库中获取准确的数据集。例如,我将在前端选择一个数字。这应该在数据库中查看它是否存在,然后给我确切的数据集,但我只用 LIKE 语句得到它,这给了我 2 个不正确的数据集。这些值用逗号分隔。
这是一个代码示例:
$results = $wpdb->get_results( 'SELECT *
FROM ' . $wpdb->prefix . "imports
WHERE import_strassennamen = '" . $_POST['street'] . "'
AND import_anzahl_strassen LIKE '%," . $_POST['street_nr'] . ",%'
AND import_year = '" . $_POST['year'] . "'", OBJECT );
名字是德语,因为我来自德国。
现在以出现两次但具有不同的所谓“区域”的数据记录为例。
例如,您可以在前端的选择字段中选择一个街道号,然后应该可以找到该区域的街道号。
例如,如果您在前端选择 4,则将选择编号为 3 的区域。或者如果您选择数字 17,则选择区域 2。
【问题讨论】:
-
我确信 WordPress 开发人员已尽一切努力保护他们的代码免受 SQL Injection Attack 的攻击。但你刚刚摧毁了这一切。您应该始终在
MYSQLI_或PDOAPI 中使用 prepared parameterized statements,而不是将用户提供的值连接到查询中。 -
那么在什么情况下您会获得比预期更多的记录?您使用的街道号输入值是什么,在这里也可以得到 area=2 的记录,尽管您只希望得到 area=3 的记录?
-
哦,好老的逗号分隔信息数据库设计错误。
-
WHERE find_in_set(4, import_anzahl_strassen);这对你有用吗 -
是的,FIND_IN_SET 确实是最好的选择 - 这样您就不必自己为值添加任何逗号。
标签: php sql database wordpress