我试图从php / mysql中的不同列获取不同的行,并将它们打包成一个数组。如果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',以便连续找不到匹配项。
答案 0 :(得分:0)
而不是指定为'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();
你甚至可以完全放弃其他部分。
答案 1 :(得分:0)
检查此片段中的代码,不要对变量使用相同的名称:
if ($row['facebook'] === $_GET['facebook']) {
$fbaddr = $row['dogeaddr'];
//echo json_encode($row['dogeaddr']);
} else {
$fpaddr = 'null';
}
$ fbaddr与$ fpaddr不同,这会为if语句分配错误的结果。
答案 2 :(得分:0)
问题是mysql查询。
对于那些遇到此问题且需要类似内容的人,您需要像这样格式化查询:
** MYSQL QUERY **
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']);
}