$ result-> fetch_all(MYSQLI_ASSOC)什么都不返回

时间:2017-01-08 10:19:20

标签: javascript php mysql json ajax

我正在尝试创建JSON回调。我有两个文件,json.html和json.php。另外,我有一个像这样的数据库:

Type: MySQL
DB Name: user_table
Table name: customers
Fields: id, name, product, supplier

我的json.html的代码是:

<html>
<head>

</head>
<body>

<div id="demo" style="font-size: 20px;"></div>

<script>

obj = { "table":"customers", "limit":10 };
dbParam = JSON.stringify(obj);
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        myObj = JSON.parse(this.responseText);
        for (x in myObj) {
            txt += myObj[x] + "<br>";
        }
        document.getElementById("demo").innerHTML = txt;
    }
};
xmlhttp.open("POST", "json.php", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send("x=" + dbParam);

</script>

</body>
</html>

以下是json.php的代码:

<?php

$servername = "localhost";
$username = "user";
$password = "pass";
$dbname = "db";

header("Content-Type: application/json; charset=UTF-8");
$obj = json_decode($_POST["x"], false);

$conn = new mysqli($servername, $username, $password, $dbname);
$result = $conn->query("SELECT name FROM ".$obj->$table." LIMIT ".$obj->$limit);
$outp = array();
$outp = $result->fetch_all(MYSQLI_ASSOC);

echo json_encode($outp);

?>

以下是错误日志报告:

PHP注意:未定义变量:第7行/home/user/public_html/json/json.php中的表

PHP致命错误:无法访问第7行/home/user/public_html/json/json.php中的空属性

PHP注意:第4行的/home/user/public_html/json/json.php中的未定义索引:x PHP注意:未定义的变量:第7行/home/user/public_html/json/json.php中的表

PHP注意:尝试在第7行的/home/user/public_html/json/json.php中获取非对象的属性

PHP注意:未定义变量:第7行/home/user/public_html/json/json.php中的限制

PHP注意:尝试在第7行的/home/user/public_html/json/json.php中获取非对象的属性

PHP致命错误:在第9行的/home/user/public_html/json/json.php中调用非对象的成员函数fetch_all()

我怎样才能让它发挥作用?

4 个答案:

答案 0 :(得分:0)

尝试替换

$result = $conn->query("SELECT name FROM ".$obj->$table." LIMIT ".$obj->$limit);

$result = $conn->query("SELECT name FROM ".$obj->{'table'}." LIMIT ".$obj->{'limit'});

答案 1 :(得分:0)

试试这个......

在您的javascript发送对象中..

xmlhttp.send(obj);

在PHP中:

<?php

$servername = "localhost";
$username = "user";
$password = "pass";
$dbname = "db";

header("Content-Type: application/json; charset=UTF-8");
extract($_POST); //Extracting 

$conn = new mysqli($servername, $username, $password, $dbname);
$result = $conn->query("SELECT name FROM ".$table." LIMIT ".$limit);
$outp = array();
$outp = $result->fetch_all(MYSQLI_ASSOC);

print_r($outp);
echo json_encode($outp);

?>

答案 2 :(得分:0)

看起来你要发送的JSON没有进入PHP脚本。

我会做的一些事情是:

答案 3 :(得分:0)

正如David对评论中所提到的,问题在于fetch_all()。我想问题是服务器资源是什么,因为页面在通话时返回了500。

在任何情况下,我都使用此方法检索所需的数组:

$conn = new mysqli($servername, $username, $password, $dbname);
$result = $conn->query("SELECT * FROM customers LIMIT 10");
$outp = array();    

while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
    $outp[] = $result->fetch_array(MYSQLI_ASSOC);
}


echo json_encode($outp);

它有效。

现在,我将使用我的JSON回调。