【发布时间】:2016-02-18 00:46:01
【问题描述】:
由于某种原因,stmt_num_rows 总是以 0 结束。无论我使用正确的电子邮件和单词还是错误的电子邮件和单词执行查询。
这是代码:
include_once './Connect.php';
$db = new DB_Connect();
$con = $db->connect();
$password = $_POST["Password"];
$email = $_POST["Email"];
$word = $_POST["Word"];
$true = 'true';
$false = 'false';
$response = array();
$selectquery = mysqli_prepare($con, "SELECT ID FROM users WHERE Email = ? AND Word = ?");
mysqli_stmt_bind_param($selectquery , "ss" , $email , $word);
mysqli_stmt_execute($selectquery);
mysqli_stmt_store_result($selectquery);
mysqli_stmt_bind_result($selectquery, $ID);
if (mysqli_stmt_num_rows($selectquery) > 0){
$response[resp] = $true;
$updatequery = mysqli_prepare($con , "UPDATE users SET Password = ? WHERE Email = ? AND Word = ?");
mysqli_stmt_bind_param($updatequery ,"sss", $password, $email, $word);
mysqli_stmt_execute($updatequery);
mysqli_stmt_close($updatequery);
}else{
$response[resp] = $false;
}
echo json_encode($response);
mysqli_stmt_close($selectquery);
mysqli_close($con);
运行代码:密码、电子邮件和Word是从android发布的。首先有一个查询来检查表中是否有一个用户(行)与对应的Email和Word。如果是这样,则添加 ID。然后调用stmt_num_rows 来检查获取的行数,但获取的行数最终为0(我得到的响应为“false”)。但如果它是一个,那么将调用 UPDATE 查询,我会收到一个响应“true”。有谁知道我犯的错误?
谢谢!
【问题讨论】:
-
'resp' 未定义,需要多调试,添加日志
-
您甚至可能不需要使用
mysqli_stmt_store_result和mysqli_stmt_bind_result。尝试删除/评论那些,然后再试一次。如果失败,那么您的 POST 可能会失败。检查这些和变量以及查询中的错误。 -
还要确保没有引入空格,如果是这样,
trim()并执行 var_dump。请记住,POST 数组区分大小写。Password和password等是两种不同的动物。其他 POST 数组也是如此。 -
啊太棒了。很高兴听到它解决了@IvanJavorovic 干杯
标签: php mysql mysqli prepared-statement