【问题标题】:GET Multiple MySQL Rows, Form PHP Variables, and Put Into Json Encoded Array获取多个 MySQL 行,形成 PHP 变量,并放入 Json 编码数组
【发布时间】:2014-02-22 20:00:03
【问题描述】:

我正在尝试从 php/mysql 的不同列中获取不同的行,并将它们打包到一个数组中。如果 GET 字符串中的所有值都匹配,我能够成功地 GET 一个 jason 编码的数组。但是,如果没有匹配,代码会回显“不匹配”,并且没有数组。我知道这是因为我的代码的格式。我想要帮助弄清楚的是如何格式化我的代码,以便它只在数组中显示“null”以匹配它无法找到的匹配项。

这是我的代码:

include '../db/dbcon.php';
$res = $mysqli->query($q1) or trigger_error($mysqli->error."[$q1]");
if ($res) {
if($res->num_rows === 0)
{
    echo json_encode($fbaddra);
}
else
{
    while($row = $res->fetch_array(MYSQLI_BOTH)) {
    if($_GET['a'] == "fbaddra") {
        if ($row['facebook'] === $_GET['facebook']) {
            $fbaddr = $row['addr'];

        } else {
            $fbaddr = null;
        }
        if ($row['facebookp'] === $_GET['facebookp']) {
                $fbpaddr = $row['addr'];

        } else {
            $fbpaddr = null;
        }
        $fbaddra = (array('facebook' => $fbaddr, 'facebookp' => $fbpaddr));
        echo json_encode($fbaddra);
    }
    }
}
$mysqli->close();

更新:GET 请求

我希望下面的 GET 请求返回完整的数组,其中包含数组中不匹配为“null”的任何值。

domain.com/api/core/engine.php?a=fbaddra&facebook=username&facebookp=pagename

上面的 GET 当前返回 null。

有效的请求:

domain.com/api/core/engine.php?a=fbaddra&facebook=username or    domain.com/api/core/engine.php?a=fbaddra&facebookp=pagename

这些请求返回具有匹配值的完整数组,或返回 null 的值。

TL;DR 我需要帮助来确定如何格式化代码以返回值为“null”的完整数组,以便在一行中找不到匹配项。

【问题讨论】:

  • 你的逻辑有缺陷。你不能有while(..) {... json_encode();}。您将输出无效的 json - json 字符串必须是 MONOLITHIC 实体。你不能简单地将多个 json 编码的“东西”堆叠在一起并让它们工作。

标签: php arrays json mysqli get


【解决方案1】:

而不是分配为'null'分配null。你的完整代码如下:

include '../db/dbcon.php';
$res = $mysqli->query($q1) or trigger_error($mysqli->error."[$q1]");
if ($res) {
if($res->num_rows === 0)
{
    echo json_encode('no match');
}
else
{
    while($row = $res->fetch_array(MYSQLI_BOTH)) {
    if($_GET['a'] == "fbaddra") {
        if ($row['facebook'] === $_GET['facebook']) {
            $fbaddr = $row['dogeaddr'];
                //echo json_encode($row['dogeaddr']);
        } else {
            $fpaddr = null;
        }
        if ($row['facebookp'] === $_GET['facebookp']) {
                $fbpaddr = $row['dogeaddr'];
                //echo json_encode($row['dogeaddr']);
        } else {
            $fbpaddr = null;
        }
        $fbaddra = (array('facebook' => $fbaddr, 'facebookp' => $fbpaddr));
        echo json_encode($fbaddra);
    }
    }
}
$mysqli->close();

你甚至可以完全离开 else 部分。

【讨论】:

  • 如果 GET 字符串中的一个或两个值不匹配,它仍然只返回“不匹配”,而不是带有不匹配值的完整数组作为“空”。跨度>
  • 只有在代码从未输入其他部分时才会出现匹配。您的 else 部分是否按预期工作。如果你想格式化 if 部分,你可以使用 $fbaddra = (array('facebook' => null, 'facebookp' => null));回声 json_encode($fbaddra);在 if 部分
  • 我同意 else 语句需要重新格式化。但是,如果我将echo json_encode('no match'); 更改为echo json_encode($fbaddra);,那么我得到的只是空值,并且没有数组。有什么建议吗?
  • 首先为 $fbaddra 创建空数组,如$fbaddra = (array('facebook' => null, 'facebookp' => null));,然后使用echo json_encode($fbaddra);
  • 奇数。我仍然只返回 null,上面的代码和您指定的空白数组值。似乎整个事情可能需要重新构建?有什么建议吗?
【解决方案2】:

检查您在此片段中的代码,您没有为变量使用相同的名称:

if ($row['facebook'] === $_GET['facebook']) {
            $fbaddr = $row['dogeaddr'];
                //echo json_encode($row['dogeaddr']);
        } else {
            $fpaddr = 'null';
        }

$fbaddr 与 $fpaddr 不同,这将错误的结果分配给 if 语句。

【讨论】:

  • 已修复,但仍然只给出“不匹配”。没有数组。
  • 将:echo json_encode('no match'); 行替换为:$fbaddra = (array('facebook' => 0, 'facebookp' => 0)); echo json_encode($fbaddra);
  • 把 esle $fbaddra = (array('facebook' => null, 'facebookp' => $fbpaddr));而不是 else echo null,对于 else 函数(每个 else 函数各自的变量),仍然在 GET 请求上返回 null。没有数组。
【解决方案3】:

问题出在 mysql 查询上。

对于那些遇到这种情况并需要类似内容的人,您需要像这样格式化您的查询:

** MYSQL 查询 **

if ($_GET['PUTVALUEHERE']) {
    $g = $_GET['PUTVALUEHERE'];
    $gq = $mysqli->real_escape_string($g);
    $q1 = "SELECT * FROM `addrbook` WHERE `facebookp` = '".$gq."' OR `facebook` = '".$gq."'";
}

** PHP 代码 **

if($_GET['PUTVALUEHERE']{
echo json_encode($row['addr']);

}

【讨论】:

    猜你喜欢
    • 2014-09-25
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 2016-02-12
    相关资源
    最近更新 更多