0

我正在尝试返回从我的数据库中提取的名称的 json 数组。我不确定我在这里缺少什么,但它永远不会收到警报呼叫。返回的数据不一定是 json,我只是先尝试​​这种方法。它完成了 INSERT 调用,我知道它正在返回正确的数据集。我的代码有什么问题?

Javascript

function showDB() {
    $.post('example.php', $('#infoForm').serialize(), function(data) {  
        var json = $.parseJSON(data);
        $.each(json, function(i, item) {
            alert(item);
        });
    }, "json");
}

PHP

<?php
    $host = "www.host.com";
    $user = "user";
    $pwd = "password";
    $db = "exampleDB";

    $conn = mysqli_connect($host, $user, $pwd)or die("Error connecting to database.");
    mysqli_select_db($conn, $db) or die("Couldn't select the database."); 

    $name = $_POST['name'];
    $color = $_POST['color'];   
    $nameArray = array();

    $stmt = mysqli_stmt_init($conn);
    $query = "INSERT INTO people VALUES (?, ?)";
    mysqli_stmt_prepare($stmt, $query) or die("Failed to prepare statement.");
    mysqli_stmt_bind_param($stmt, "ss", $name, $color);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_close($stmt);

    $query = "SELECT name, COUNT(*) AS dupes FROM people GROUP BY name ORDER BY dupes DESC LIMIT 20";
    $result = mysqli_query($conn, $query);

    while ($row = $mysqli_fetch_array($result)) {
        array_push($nameArray, $row['name']);
    }

    echo json_encode($nameArray);

    mysqli_close($conn);

?>
4

2 回答 2

1

您的 PHP 代码中有一个错误。

找到这行代码:

$nameArray[] = "";

替换为这行代码:

$nameArray = array();

更新

找到这行代码:

$query = "SELECT name, COUNT(*) AS dupes FROM people GROUP BY name ORDER BY dupes DESC LIMIT 20;";

替换为这行代码

$query = "SELECT name, COUNT(*) AS dupes FROM people GROUP BY name ORDER BY dupes DESC LIMIT 20";

注意字符串中的分号。


再次更新

找到这行代码:

while ($row = $mysqli_fetch_array($result)) {

替换为这行代码

while ($row = mysqli_fetch_array($result)) {

mysqli_fetch_array是一个函数。

于 2013-06-13T15:47:15.443 回答
0

你这里有错误

$nameArray[] = "";

你需要用

$nameArray[] = array();

现在的原因是,在您的代码中,您正在初始化一个没有值甚至没有任何索引的数组,因此这将产生错误。但是如果你用它替换array()它会初始化一个数组。当您将值推array_push($nameArray, $row['name']);入其中时,它将在索引 0 上的数组中推入值,然后在 1 上推入,依此类推。

于 2013-06-13T16:03:23.800 回答