- > num_rows无法正常工作

时间:2013-09-10 22:47:15

标签: php mysql sql mysqli

我不明白为什么$ 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没有正确计算结果数。

3 个答案:

答案 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
}