由于某种原因,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发布。首先,有一个查询来检查表中是否有用户(行)以及相应的电子邮件和Word。如果是,则添加ID。然后调用stmt_num_rows
来检查所获取的行数,但是获取的行数最终为0(我得到响应为" false")。但如果它是一个,则会调用UPDATE查询,我会收到响应" true"。有谁知道我犯的错误?
谢谢!
答案 0 :(得分:1)
将我们的评论用以解决此问题:
矿:
"尝试删除/评论这些并重新尝试。如果失败,那么您的POST可能会失败。检查这些和变量以及查询中的错误。"
和
"还要确保没有引入空格,如果是,
也是如此trim()
并执行var_dump。请记住POST阵列区分大小写。Password
和password
等是两种不同的动物。其他POST阵列"
伊万' S:
"弗雷德你说得对,问题不在于它实际上是发布的数据。由于我使用Async Http库,我忘了发布我想发送的实际参数。我将params设置为null"
<强>密码强>
我注意到您可能以纯文本格式存储密码。不建议这样做。
使用以下其中一项:
crypt()
bcrypt()
scrypt()
password_hash()
功能。其他链接:
关于列长的重要说明:
如果您决定使用password_hash()
或隐藏,请务必注意,如果您当前的密码列长度低于60,则需要将其更改为(或更高)。手册建议长度为255。
您需要更改列的长度并重新开始使用新哈希才能使其生效。否则,MySQL将无声地失败。