簡體   English   中英

Mysqli_query返回0行(字符問題?)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM