获取多个MySQL行,形成PHP变量,并放入Json编码的数组中
我试图从php/mysql中的不同列中获取不同的行,并将它们打包到一个数组中。如果GET字符串中的所有值都匹配,我就能够成功地获取jason编码的数组。但是,如果不匹配,则代码会回显“不匹配”,并且没有数组。我知道这是因为我的代码的格式。我想帮助弄清楚的是,如何格式化我的代码,使其在数组中只显示“null”,以匹配它找不到的匹配项 这是我的代码:获取多个MySQL行,形成PHP变量,并放入Json编码的数组中,php,arrays,json,mysqli,get,Php,Arrays,Json,Mysqli,Get,我试图从php/mysql中的不同列中获取不同的行,并将它们打包到一个数组中。如果GET字符串中的所有值都匹配,我就能够成功地获取jason编码的数组。但是,如果不匹配,则代码会回显“不匹配”,并且没有数组。我知道这是因为我的代码的格式。我想帮助弄清楚的是,如何格式化我的代码,使其在数组中只显示“null”,以匹配它找不到的匹配项 这是我的代码: include '../db/dbcon.php'; $res = $mysqli->query($q1) or trigger_error($
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请求返回完整的数组,数组中任何不匹配的值都作为“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”的完整数组。而不是将其赋值为“null”将其赋值为“assign 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();
您甚至可以将其他部分全部保留。在该片段中检查您的代码您不能使用相同的变量名称:
if ($row['facebook'] === $_GET['facebook']) {
$fbaddr = $row['dogeaddr'];
//echo json_encode($row['dogeaddr']);
} else {
$fpaddr = 'null';
}
$fbaddr与$fpaddr不同,这将错误的结果分配给if语句。问题出在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']);
}如果GET字符串中的一个或两个值不匹配,它仍然只返回“不匹配”,而不是将不匹配的值作为“null”的完整数组。只有当代码从未输入其他部分时,才会出现不匹配。您的其他部分是否按预期工作。如果您还想格式化If部分,可以使用$fbaddra=(array('facebook'=>null,'facebook'=>null));echo json_编码($fbaddra);在if PARI中,我同意else语句需要重新格式化。但是,如果我更改echo json_encode('no match')代码>至
回声json_编码($fbaddra)然后我得到的是null,没有数组。建议?首先为$fbaddra创建空数组,如$fbaddra=(数组('facebook'=>null,'facebook'=>null))
然后使用echo json_encode($fbaddra)代码>奇数。我仍然只返回null,使用上面的代码和指定的空白数组值。看起来整个事情可能需要重组?建议?已修复,但仍然只给出“不匹配”。无数组。替换:echo json_encode('No match')代码>行到:$fbaddra=(数组('facebook'=>0,'facebook'=>0));echo json_编码($fbaddra)代码>放置esle$fbaddra=(数组('facebook'=>null,'facebook'=>fbaddr));对于else函数(每个else函数都有各自的变量),GET请求时仍然返回null,而不是else echo null。没有阵列。你的逻辑有缺陷。您不能在(..{…json_encode();}
时使用。您将输出无效的json-json字符串必须是一个整体实体。您不能简单地将多个json编码的“东西”堆叠在一起并让它们工作。