【问题标题】:MySQL query with PHP not returning expected data使用 PHP 的 MySQL 查询未返回预期数据
【发布时间】:2016-01-18 02:25:39
【问题描述】:

我正在尝试使用 PHP 访问 MySQL 数据库以填充 Javascript 数组,但该数组始终为空。之前,我有一个“www-data@localhost”访问错误,但无法弄清楚并回滚了代码。任何人都可以分享任何见解吗?

JS:

var arrayPOIs = [];

function getPoints(){
    $.get('getdata.php', function(data){
        arrayPOIs = data;   
    });
}

getdata.php:

$mysqli = new mysqli("localhost", "user", "pass", "test");

if (mysqli_connect_errno())
{
    echo("Connect failed: ") . mysqli_connect_error();
    exit();
}

$query = "SELECT * FROM points";

$result = mysqli_query($query) or die(mysqli_error());

$potential = mysqli_fetch_array($result);

echo json_encode($potential);

我试图将表的内容输出到数组。在我的浏览器控制台中,它总是显示为空。如:

arrayPOIs
""

我认为数据库连接查询过程可能存在一些问题。虽然,我对此很陌生,而且我迷路了。有什么想法吗?

此外,我如何以及在哪里可以实时检查 PHP 正在做什么,即错误消息?

编辑:

对 cme​​ts 的跟进:

  • 在添加"json" 作为第三个参数后,arrayPOIs var 变为(在 FF 的控制台中)Array [ ]

  • 我的getdata.php 页面在直接访问时显示为空(空白)

EDIT2:

在 Niranjan N Raju 的帮助 (+1) 之后,它已部分修复。我的查询调用中的 php 语法错误。现在,我的对象不正确。我得到:

{"0":"1","id":"1","1":"poi_teste1","name":"poi_teste1","2":"41.1953","latitude":"41.1953 ","3":"-8.60134","经度":"-8.60134"}

但我需要类似 (JSON) 的东西:

name: poi_teste1,
latitude: 3464357247,
longitude: 247245672

对于表中的每一行,如下所示:

id | name    | latitude | longitude
#1 | string  | float    | float
#2 | string  | float    | float
#3 | string  | float    | float
#4 | string  | float    | float

【问题讨论】:

  • 您好,在 json_encode 之前添加一个数组计数以确保您的数组不为空
  • json 作为第三个参数添加到$.get 函数时是否有效?
  • 另外,从浏览器访问getdata.php 页面,告诉我们它返回的内容。
  • 我认为您现在必须更改获取类型。无法测试,试试mysqli_fetch_assoc

标签: javascript php mysql json


【解决方案1】:

你错过了mysqli_query()中的连接对象

这样改

$result = mysqli_query($mysqli,$query) or die(mysqli_error());
                       ^      ^

编辑

如果你得到超过 1 行,比如

array(
    0 => id,name,lat and long,
    1 => id,name,lat and long,
    2 => id,name,lat and long,
);

对于上述结果,输出是正确的。要访问 ajax 中的值,请使用 for() loop

另外,既然你不想要索引,记得改成

$potential = mysqli_fetch_array($result);

$potential = mysqli_fetch_assoc($result);

更多信息请访问fetch_assoc

【讨论】:

  • 就是这个……!但不幸的是,我认为在编码对象时还有其他问题。我将在上面的问题中添加细节。你能帮忙吗?
  • 你确定添加它。但上面的答案是有效的。我查过了。
  • @Joum 你看到我对这个问题的评论了吗?
  • @NiranjanNRaju 如果我可以编辑答案以适合我的评论,你可以吗?
  • @FirstOne 是的。去做吧。
【解决方案2】:

仅供将来参考,如果它可能对某人有所帮助:在得到@Niranjan N Raju 和@FirstOne 的大力帮助之后,这正如我所愿:

JS:

function getPoints(){
    $.get('getdata.php', function(data){
    //gotta do something with that data! :)
    arrayPOIs = data;   
    }, "json");
}

getdata.php:

$mysqli = new mysqli("localhost", "user", "pass", "test");

/* check connection */
if (mysqli_connect_errno())
{
    echo("Connect failed: ") . mysqli_connect_error();
    exit();
}

$query = "SELECT * FROM points";

$resultArray = array();
$index = 0;

if ($result = $mysqli->query($query)) {

    /* fetch associative array */
    while ($row = $result->fetch_assoc()) {
        $resultArray[$index] = $row;
        $index++;
    }

    /* free result set */
    $result->free();
}

echo json_encode($resultArray);

小记(我一个人想办法:):

  • 在 MySQL DB 中,latitudelongitude 是浮点型列。这个解决方案没有考虑到这一点,因为它们是以字符串的形式出现的。我发现无论是 PHP 还是 JS,我都可以parseFloat 他们。

【讨论】:

  • 那你能mysqli_fetch_all吗?只需更改resulttype,使其不返回索引,只返回关联数组。它可能看起来像这样:$potential = mysqli_fetch_all($result, MYSQLI_ASSOC);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-12
  • 2012-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多