自定义搜索、MySQL查询出错?

时间:2010-12-29 作者:Jealous Republic

我在这件事上有点发疯。我正在编写一些类似于自定义搜索表单的代码。自定义搜索表单是复选框和一些下拉列表的混合体。正在搜索的所有字段也是自定义字段。自定义字段是通过自定义写入面板输入的。一些字段是单值字段,其他字段是序列化字段。

当前的代码可以工作,但我不确定是否应该采取另一种方法,我不想找人为我编写代码。我只是想知道如何做得更好。

$city = $_REQUEST[\'sCity\'];
$activity = $_REQUEST[\'sActivity\'][0];
$riverSegment = $_REQUEST[\'sRiverSegment\'];
$topicOfInterest = $_REQUEST[\'sTopicOfInterest\'][0];

$querystr = "
SELECT DISTINCT wp_posts.* FROM wp_posts, wp_postmeta
WHERE (
 wp_posts.ID = wp_postmeta.post_id
 AND wp_postmeta.meta_key = \'city\'
 AND wp_postmeta.meta_value = \'$city\'
) OR (
 wp_posts.ID = wp_postmeta.post_id
 AND wp_postmeta.meta_key = \'riverSegment\'
 AND wp_postmeta.meta_value = \'$riverSegment\'
) OR (
 wp_posts.ID = wp_postmeta.post_id
 AND wp_postmeta.meta_key = \'topicOfInterest\'
 AND wp_postmeta.meta_value LIKE \'%$topicOfInterest%\'
) OR (
 wp_posts.ID = wp_postmeta.post_id
 AND wp_postmeta.meta_key = \'activity\'
 AND wp_postmeta.meta_value LIKE \'%$activity%\'
) AND wp_posts.post_status = \'publish\' AND wp_posts.post_type = \'sites\'
ORDER BY wp_posts.post_date DESC";
我觉得上面的示例有缺陷,因为如果第一个条件找到匹配项,它将忽略其余条件。

Side Note: 如果我使用$wpdb->get\\u results();我是否仍应转义用户输入以保持其干净?

1 个回复
最合适的回答,由SO网友:Rarst 整理而成

这看起来并不是特别复杂,但看起来很庞大,而且容易出错。

正如我对类似问题的多次回答一样,如果这不是时间关键问题,那么等待WP 3.1,因为它将对按自定义字段查询有重大改进。

看见Advanced Metadata Queries 请简要介绍即将进行的改进。

有关清理查询,请参阅$wpdb->prepare() 方法-Protect Queries Against SQL Injection Attacks.

结束

相关推荐

为什么WordPress从MySQL获得的帖子来自虚拟主机名,而不是直接主机名?

我正在Mac上开发一个WordPress网站,运行OS X 10.6.4。在开发过程中,我使用OS X的内置Apache服务器在本地运行该站点。我已经安装了WordPress,并将其连接到OS X的MySQL,没有问题。该网站似乎运行良好,我可以发布、编辑等。WordPress安装在一个名为~/Sites/mysite.dev.我还定制了.hosts 文件和Apachehttpd-vhosts.conf 文件,以重定向对mysite的请求。请转到这个文件夹。所以当我进去的时候http://mysite.d