【发布时间】:2013-07-19 03:45:42
【问题描述】:
下面的 PHP 在插入的情况下可以正常工作,但是对于绑定参数的选择查询,读取 json 的运气并不好。我现在创建的应用程序总是使用 if 语句评估行数返回 false。我觉得问题确实在于 mysqli_stmt_store_result($query) 的范围。用户的登录凭据在尝试登录时不起作用,即使它们是正确的。如果需要更多信息,请告诉我。数据库连接正常。
//parameter checking
$username = safe(stripslashes(trim($_POST['username'])));
$mypassword=hash('sha256', $salt.$_POST['password']);
//sanitize input parameters
function safe($value)
{
global $db;
$secureString = mysqli_real_escape_string($db, $value);
return $secureString;
}
//query check
$query= mysqli_prepare($db, "SELECT * FROM Users WHERE username =? AND password =? AND block_status < 1");
//$result=mysqli_query($db,$query);
mysqli_stmt_bind_param($query,'ss',$username,$mypassword);
mysqli_stmt_execute($query);
/* store result */
mysqli_stmt_store_result($query);
$query2="UPDATE Users SET last_login=NOW() WHERE username ='" . $username . "' AND password = '" . $mypassword . "'";
$result2=mysqli_query($db,$query2);
//if match found, create an array of data and json_encode it
if(mysqli_stmt_num_rows($query)>0)
{
$row=mysqli_fetch_array($query,MYSQLI_ASSOC);
$response=array(
'logged'=>true,
'name'=>$row['name'],
'email'=>$row['email']
);
echo json_encode($response);
}
else
{
$response=array(
'logged'=>false,
'message'=>'Invalid credentials or your access has been revoked'
);
echo json_encode($response);
}
/* free result */
mysqli_stmt_free_result($query);
/* close statement */
mysqli_stmt_close($query);
mysqli_close($db);
?>
【问题讨论】:
-
如果使用参数绑定,则不需要使用
mysqli_real_escape_string() -
谢谢,一旦我发现这个脚本错误,我会更新。
-
@Phil 出于某种非常奇怪的原因,OP 将准备好的语句用于第一个查询,但不用于第二个查询。
标签: php mysql json mysqli prepared-statement