[英]Mysqli_query returning 0 rows (character problem?)
我對此php代碼有疑問:
<?php
$data = json_decode($_POST['data'], true);
$user = mysqli_real_escape_string($conn, $data['username']);
$password = md5($data['password']);
$query = mysqli_query($conn, 'SELECT * FROM Utenti WHERE username = "$user" AND password = "$password"');
if(mysqli_num_rows($query) > 0){
$status = 'ok';
} else{
$status = 'error';
session_destroy();
}
echo $status;?>
這是請求(JSON編碼):
POST /login HTTP/1.1
Host: example
User-Agent: example
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: length
data=%7B%22username%22%3A+%22harry%22%2C+%22password%22%3A+%22potter%22%7D
當我這樣寫查詢字面意義為“ SELECT * FROM Utenti WHERE username =“ harry” AND password =“ potter”時,這將返回“ error” bur,它將返回“ ok”。 此外,語句'$ user ==“ harry”和$ password ==“ potter”返回true。 可能是字符編碼/ json問題嗎?
PS我知道的安全問題(MD5,HTTP)這只是一個測試
如果用單引號括住字符串(SQL查詢),則不會擴展變量。 您需要為此使用雙引號:
$string = 'user="$user"';
// literally the string: user="$user"
$string = "user=\"$user\"";
// literally the string: user="harry"
PHP中的單引號表示字符串的內容是按字面意義使用的。 因此,它不會插入$user
和$password
變量的值-實際上將在檢查用戶名"$user"
。
您應該將整個查詢字符串括在雙引號中,然后它應該可以工作。
當您在用單引號引起來的select語句中使用“ $ user”和“ $ password”時,以這種方式更改select語句,變量將被視為文字。 因此,您必須對語句使用雙引號,對變量使用單引號
"SELECT * FROM Utenti WHERE username = '$user' AND password = '$password'"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.