自定义查询-基于用户输入

时间:2015-12-16 作者:JohnMcCarthy

我正在为输入显示建议,帮助用户。

我正在使用包含的jQuery建议。这就是加载——通过ajax,我使用了一个自定义SQL查询,可以看到它正试图将其拉入。

我在编写SQL查询时遇到问题。

这是我到目前为止的情况。

global $wpdb;

// group name key
$meta_key = \'_create_new_group\';
// user input
$search = $_REQUEST[\'q\'];

$groupnames = $wpdb->get_col($wpdb->prepare(
    "
    SELECT  meta_value 
    FROM    $wpdb->postmeta
    WHERE   meta_key = %s
    LIKE    %s // Works up to here
    ",
    $meta_key,
    $search
));
为了了解我现在的情况,我使用了wpdb类参考中的示例。http://codex.wordpress.org/Class_Reference/wpdb

当我输入输入时,查询会使服务器过载。一个var\\u转储在加载时开始列出我所查询内容之外的元数据(据我所知)。

有没有人能看出我明显的错在哪里。。。

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

虽然这主要是一个SQL问题,但据我所知,有些WordPress组件和Core没有有效的机制来提取这些数据。在我看来,这一直是一个核心问题。因此:

global $wpdb;

// group name key
$meta_key = \'_create_new_group\';
if (!empty($_REQUEST[\'q\'])) {
  // user input
  $search = $_REQUEST[\'q\'].\'%\';

  $sql = "SELECT meta_value 
  FROM {$wpdb->postmeta} 
  WHERE meta_key = \'{$meta_key}\' 
  AND meta_value LIKE %s";
  $sql = $wpdb->prepare($sql,$search);
  // var_dump($sql);
  $groupnames = $wpdb->get_col($sql);
}
备注:

如果$_REQUEST[\'q\'] 未设置。这就是if (!empty($_REQUEST[\'q\'])) { 有条件的不需要转义硬编码的值,只有用户提供。就你而言$search 仅限$search.