fetch_assoc mysqli返回空

时间:2017-11-10 04:38:15

标签: php mysql mysqli

我试图使用PHP函数查询mySQL数据库。间歇性地,我正在使用的功能似乎没有返回结果。据我所知,它不是空响应,并且基于该函数,它似乎没有返回无效结果(在这种情况下返回字符串 Nuthin )。

function GeneratePiece2 ($sqlstr){
  $conn = new mysqli(gHOST, gUSER, gPASSWORD, gDATABASE);
  // Check connection
  if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
  }
  $result = $conn->query($sqlstr);
  $returnable = "";
  if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        echo $row;
        $returnable = $row;
    }
  } else {
    return "nuthin";
  }
  $conn->close();
  return $returnable;
}

我一直在使用

的相同SQL查询
SELECT  Name FROM Char_Name_full WHERE Male=1 AND DivisionID=12  ORDER BY RAND() LIMIT 1

大约80%的时间我会收到像 {“Name”:“Christoph”} 之类的结果,但是十分之一的回报没有。

2 个答案:

答案 0 :(得分:1)

如果某人在fetch_assoc()返回“未定义索引”时遇到问题: 检查索引名称(数据库列名称),它们区分大小写

示例: 对于“ SELECT Name FROM ...”,您的代码必须为$ row [“ Name”]。不是NAME或NAME。

答案 1 :(得分:0)

在您的查询中,您正在检查行数是否大于零,但您没有做任何事情来检查返回的值是否为Null。您描述的行为与'名称'中的至少1行的方案相匹配。具有NULL值。

  

请注意,我不打算在此处对您的代码结构或语法发表评论,但我已更改您的响应值,以帮助识别/证明空值是此处的问题。

     

此外,如果您的查询仅限于一行,则while循环将只迭代一次。

if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        // Echo out the values for Name in the result set
        if(is_null($row["Name"], )) 
            echo '[NULL]';
        else
            echo $row["Name"];

        // your application logic ;)
        $returnable = $row;
    }
} else {
    return "no rows";
}

请考虑在开发过程中使用Toad for MySQL之类的SQL IDE,然后您可以直观地检查数据是否存在这些问题,而无需编写代码黑客:)