我不明白为什么$ amountOfUsers显示为0?
这在我转移到bind_param函数之前曾经工作过...我只使用了prepare()的instad of prepare。但这更安全,我只是很难理解为什么这不起作用,以及如何解决它。
$stmt = $mysqli->prepare("SELECT id, expire, status, username FROM username WHERE username= ?");
$stmt->bind_param('s', $username);
$stmt->execute();
//Counting results. 0 = Invalid, 1 = Valid
$amountOfUsers = $stmt->num_rows;
我得到的错误是:$ amountOfUsers没有正确计算结果数。
答案 0 :(得分:1)
$stmt = $mysqli->prepare("SELECT id, expire, status, username FROM username WHERE username= ?");
$stmt->bind_param('s', $username);
$stmt->execute();
// Store the result (so you can get the properties, like num_rows)
$stmt->store_result();
// Get the number of rows
$amountOfRows = $stmt->num_rows;
// Bind the result to variables
$stmt->bind_result($id, $expire, $status, $db_username);
// Process the variables
while($stmt->fetch()) {
printf("%d %s %s %s\n", $id, $expire, $status, $db_username);
}
答案 1 :(得分:0)
有时事情不按计划进行。检查库中可用的结果代码和错误通常比询问陌生人更有效,但希望这个陌生人可以帮助...选择以下模式之一:
A:
$result = $stmt->execute();
if (!$result) { /* handle errors */ }
B:
$stmt->execute();
if ($stmt->errno != 0) { /* handle errors */ }
C(仅用于开发故障排除,而不是您要留下的代码):
$stmt->execute();
print_r($stmt->error_list);
此处及相关网页的详细信息: http://www.php.net/manual/en/mysqli-stmt.errno.php
答案 2 :(得分:-2)
在我的生活中,我永远不会理解为什么php用户如此倾向于返回的行数 特别是如果仅用作标志...如果有任何数据返回!
为什么不采取返回的数据并看到?
$sql ="SELECT id, expire, status, username FROM username WHERE username= ?s";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('s', $username);
$stmt->execute();
$res = $stmt->get_result();
$row = $res->fetch_assoc();
if ($row)
{
// do whatever
}
我永远不会理解对长而大风的代码的倾向。
为什么不让自己成为一个抽象库并将所有内容集中在一行?
$sql = "SELECT id, expire, status, username FROM username WHERE username= ?";
if ($row = $db->getRow($sql))
{
// do whatever
}