我有一个更改用户密码的查询,我想在更改之前检查用户是否知道他们的当前密码。所以它是有效的,我需要在进行更改之前输入当前密码,但我的输出仍然总是错误的,这是我的代码:
$passwordnew=$_POST['passwordnew'];
$password=$_POST['password'];
$password_hash = md5($passwordnew);
$sql = "UPDATE cryptuser SET password='" . $password_hash."' WHERE password = '".md5($password)."' AND userID ='" . $userid ."' ";
//Check SQL Query
$stmt = sqlsrv_query( $conn, $sql,array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET ));
var_dump(sqlsrv_rows_affected($stmt));
$rows_affected = sqlsrv_rows_affected( $stmt);
if( $rows_affected === false) {
die('password incorrect');
}
else{
echo $rows_affected." the password was updated.<br />";
}
if(!$stmt)
{
die('An error has occured with your registration. If this is an indeliberate occurance,
please report this to us through the contact us page with details of the error.');
}
有人能看到这不会输出"密码已更新"吗?它总是返回密码不正确(false)
可能不再与作者相关,但对于发现这个问题的人来说,答案是:
sqlsrv_errors()返回一条消息:"此函数仅适用于不可滚动的语句"。可以通过将SQLSRV_CURSOR_KEYSET更改为SQLSRV_URSOR_FORWARD或完全删除"Scrollable"参数来修复上述代码。
Astax是对的。。。
这是一个让sqlsrv_rows_affected()工作的完整示例查询。关键是将sqlsrv_query()$选项设置为查询中的数组('Crollable'=>sqlsrv_CURSOR_FORWARD)。如果你没有任何parm,只需在中放入array()
$sql = "UPDATE TOP (1) MyTable SET name=? WHERE id=$id";
$params = array($name);
$options = array('Scrollable' => SQLSRV_CURSOR_FORWARD);
$stmt = db_mssql_query($db, $sql, $params, $options);
$updated_rows = sqlsrv_rows_affected($stmt);
if($updated_rows === false) {
die(print_r(sqlsrv_errors(), true));
} elseif($updated_rows == -1) {
print "No Info available<br>";
} else {
print "Updated: $updated_rows rows<br>";
}