我试图使用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”} 之类的结果,但是十分之一的回报没有。
答案 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,然后您可以直观地检查数据是否存在这些问题,而无需编写代码黑客:)