Wordpress $ wpdb自定义查询不起作用

时间:2016-06-05 13:25:12

标签: php mysql wordpress

从wpdb中检索数据并以JSON形式返回:我试图将自定义表数据填充到输入字段中,这是example。我做了一切,但PHP查询没有从表中检索数据。

这是我的WORDPRESS版本无效

<?php
 global $wpdb;
 $db_table_name = $wpdb->prefix . 'sonali_data';
 $key=$_GET['key'];
 $array = array();
 $result = $wpdb->get_results ( "SELECT * FROM $db_table_name WHERE name LIKE '%{$key}%'");

 while($row=mysql_fetch_assoc($result)){
        $array[] = $row['name'];
  }
 echo json_encode($array);
 ?>

的JavaScript

$(document).ready(function(){
    $('input#$field_name').typeahead({
             name: '$field_name',
             remote:'search.php?key=%QUERY',
             limit : 10
        });
    });

这是我的PHP版本与example

的工作方式相同
<?php
    $key=$_GET['key'];
    $array = array();
    $con=mysql_connect("localhost","root","password");
    $db=mysql_select_db("search",$con);
    $query=mysql_query("select * from ajax_example where name LIKE '%{$key}%'");
       while($row=mysql_fetch_assoc($query))
        {
          $array[] = $row['name'];
        }
        echo json_encode($array);
?>

1 个答案:

答案 0 :(得分:2)

当您使用wpdb时,它已经在进行排序并将其放入数组中,因此您不需要mysql_fetch_assoc - 您也应该使用wpdb prepare来清理字符串,尤其是在使用$ _GET时,因为您很容易受到攻击否则是sql注入 - 修改代码:

 global $wpdb;
 $db_table_name = $wpdb->prefix . 'sonali_data';
$holder = "%s";
 $key=$_GET['key'];
 $array = array();
 $result = $wpdb->get_results ( $wpdb->prepare("SELECT * FROM $db_table_name WHERE name LIKE '%{$holder}%'",$key),ARRAY_A);

 foreach($result as $res) {
        $array[] = $res['name'];
  }
 echo json_encode($array);

ARRAY_A告诉wpdb将数据排序为关联数组,默认是将其排序为OBJECT,在这种情况下你必须做$array[] = $res->name

还有一件事,如果要发送回wp_ajax挂钩,则应该使用wp_send_json:所以echo json_encode($array);而不是wp_send_json($array); TouchableOpacity