[mysql]不工作的 Wordpress $wpdb 自定义查询

标签: MySQL PHP
发布时间: 2017/4/9 22:57:06
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

从 wpdb 中检索数据,并将作为 JSON 返回︰ 我想将我的自定义表数据填充到一个输入字段下面是一个示例。我做一切,但不是从表中检索数据的 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 版本

<?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:

当您使用的 wpdb 已经正在排序和把它变成为你,所以你不需要 mysql_fetch_assoc,您也应该使用 wpdb 阵列准备消毒的字符串时,尤其是当使用 $_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);

输出告诉 wpdb 对数据进行排序成关联数组,默认情况下,排序转换为对象在这种情况下你将不得不做$array[] = $res->name

一件事,你应该使用 wp_send_json 如果您正在发送回 wp_ajax 钩︰ 如此而不是 echo json_encode($array); 你做wp_send_json($array);

官方微信
官方QQ群
31647020