Php 无法统计成功执行的mysqli查询
我想看看我的查询是否成功(当然,我成功地完成了插入查询),但在第25行出现了这个错误:“mysqli_num_rows()期望参数1是mysqli_result,布尔值给定”我已经检查了每一行,我甚至使用了mysqli_受影响的_行,但失败了。感谢您的帮助,以下是我的代码:Php 无法统计成功执行的mysqli查询,php,mysqli,insert-into,Php,Mysqli,Insert Into,我想看看我的查询是否成功(当然,我成功地完成了插入查询),但在第25行出现了这个错误:“mysqli_num_rows()期望参数1是mysqli_result,布尔值给定”我已经检查了每一行,我甚至使用了mysqli_受影响的_行,但失败了。感谢您的帮助,以下是我的代码: <?php include "connection.php"; $fn = $_POST['first_name']; $ln = $_POST['last_name']; $uname =
<?php
include "connection.php";
$fn = $_POST['first_name'];
$ln = $_POST['last_name'];
$uname = $_POST['username'];
$pwd = $_POST['password'];
$stat = $_POST['status'];
if($fn=="" || $ln=="" || $uname=="" || $pwd=="" || $stat==""){
echo "ALL FIELD MUST BE FILLED!";
}
else {
$sql = "SELECT * from user WHERE username='$uname'";
$result = mysqli_query($conn, $sql);
$number = mysqli_num_rows($result);
if ($number != 0) {
echo "Username $uname is not available";
}
else {
$options = ['cost' => 12];
$pwd = password_hash($pwd, PASSWORD_BCRYPT, $options);
$query = "INSERT INTO user
(username,password,first_name,last_name,status) VALUES
('$uname','$pwd','$fn','$ln','$stat')";
$res = mysqli_query($conn, $query);
$nmb = mysqli_num_rows($res);
echo $nmb;
}
}
?>
更改此选项:
$res = mysqli_query($conn, $query);
$nmb = mysqli_num_rows($res);
echo $nmb;
为此:
$res = mysqli_query($conn, $query);
if ($res) {
echo "Insert ok";
}
else
{
echo "Problem to insert";
}
$nmb=mysqli\u num\u行($res)
无法工作,因为$res
是插入查询的结果。说:
失败时返回FALSE。为了成功地选择、显示、描述或解释查询,mysqli_query()将返回一个mysqli_结果对象。对于其他成功的查询,mysqli_query()将返回TRUE
因此,$res
将始终为false
或true
,您将无法在其上使用mysqli\u num\u rows()
或mysqli\u impact\u rows()
。问题是,不管怎么说,计算行数在这里是没有意义的。您正在尝试插入一条记录,因此它将是1或0,因此正确或错误的结果应足以检测查询是否成功。哪一行是第25行?因为这意味着查询没有正确执行。如果您使用的是MySQL,我建议您使用。@FluxCoder这与PDO仍然存在相同的问题。@Don't但是,使用PDO更安全,我更喜欢它,因为我发现它也更容易使用。PDO本身并不安全。使用预先准备好的语句更安全,但在mysqli中也可以这样做,但这里没有这样做,所以我也不认为他们会使用PDO。(不过我也很喜欢。我同意这样更容易。)基本上就是OP在评论中所说的,但是echo“插入问题”“代码>永远无法帮助他们找到查询失败的真正原因。@Fred ii-是的,差不多。不过,一开始我添加了一些误导性的注释,因为我认为它们最初指的是SELECT查询。我认为答案会更明确,包括更好的解释,我将删除我的一些评论。