mysqli_stmt_num_rows 准备好的语句没有 return 行数
mysqli_stmt_num_rows with prepared statement doesn't return number of rows
准备好的语句 returns 0 行,而它应该 return 行:
我的代码:
$conn = mysqli_connect("localhost", "root", "", "test1");
$myUser = "qqq";
$stmt = mysqli_stmt_init($conn);
$sql = 'SELECT `userMail` FROM `users` WHERE `userName`=? LIMIT 1';
mysqli_stmt_prepare($stmt, $sql);
mysqli_stmt_bind_param($stmt, "s", $myUser);
mysqli_stmt_execute($stmt);
$myresult = mysqli_stmt_num_rows($stmt);
die(nl2br("myUser = ".$myUser."\nmyresult = ".$myresult));
我的数据:
输出:
我哪里错了...?
$myresult 应该是 1,因为有 IS 这样一行...
您已经正确地注意到在 mysqli_stmt_execute($stmt);
之后需要 mysqli_stmt_store_result($stmt);
。
根据 PHP 文档:
If you use mysqli_stmt_store_result(), mysqli_stmt_num_rows() may be called immediately.
但是,我需要指出您不需要它,或者实际上您根本不需要使用 mysqli_stmt_num_rows()
。我认为我自己也不必使用此功能。
您想要实现的是检查数据库中是否存在特定行。这可以按照此处所述完成:https://phpdelusions.net/mysqli/check_value
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$conn = new mysqli("localhost", "root", "", "test1");
$myUser = "qqq";
$sql = 'SELECT 1 FROM `users` WHERE `userName`=? LIMIT 1';
$stmt = $conn->prepare($sql);
$stmt->bind_param('s', $myUser);
$stmt->execute();
$exists = (bool) $stmt->get_result()->fetch_row();
die(nl2br("myUser = ".$myUser."\nmyresult = ".$exists));
当然可以使用 (bool) $stmt->get_result()->num_rows
.
而不是 (bool) $stmt->get_result()->fetch_row()
准备好的语句 returns 0 行,而它应该 return 行:
我的代码:
$conn = mysqli_connect("localhost", "root", "", "test1");
$myUser = "qqq";
$stmt = mysqli_stmt_init($conn);
$sql = 'SELECT `userMail` FROM `users` WHERE `userName`=? LIMIT 1';
mysqli_stmt_prepare($stmt, $sql);
mysqli_stmt_bind_param($stmt, "s", $myUser);
mysqli_stmt_execute($stmt);
$myresult = mysqli_stmt_num_rows($stmt);
die(nl2br("myUser = ".$myUser."\nmyresult = ".$myresult));
我的数据:
输出:
我哪里错了...?
$myresult 应该是 1,因为有 IS 这样一行...
您已经正确地注意到在 mysqli_stmt_execute($stmt);
之后需要 mysqli_stmt_store_result($stmt);
。
根据 PHP 文档:
If you use mysqli_stmt_store_result(), mysqli_stmt_num_rows() may be called immediately.
但是,我需要指出您不需要它,或者实际上您根本不需要使用 mysqli_stmt_num_rows()
。我认为我自己也不必使用此功能。
您想要实现的是检查数据库中是否存在特定行。这可以按照此处所述完成:https://phpdelusions.net/mysqli/check_value
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$conn = new mysqli("localhost", "root", "", "test1");
$myUser = "qqq";
$sql = 'SELECT 1 FROM `users` WHERE `userName`=? LIMIT 1';
$stmt = $conn->prepare($sql);
$stmt->bind_param('s', $myUser);
$stmt->execute();
$exists = (bool) $stmt->get_result()->fetch_row();
die(nl2br("myUser = ".$myUser."\nmyresult = ".$exists));
当然可以使用 (bool) $stmt->get_result()->num_rows
.
(bool) $stmt->get_result()->fetch_row()