php - Mysqli_query 返回 0 行(字符问题?)
问题描述
我对这个 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"
推荐阅读
- html - 了解浮动 div 周围的文本换行
- python - 为主教不工作生成对角线移动的位板
- c - 线程 1:EXC_BAD_ACCESS(代码=1,地址=0x7ffeefc00000)
- statistics - 组合2个相同分布的数组
- c# - 统一更改粒子系统开始颜色的范围
- css - 如何在 Bootstrap 中裁剪 GoogleAPI 二维码图像?
- r - ggplot 多边形 X 轴和 Y 轴缩放并更改组的颜色
- php - Codeigniter 中的 Ajax 文件上传
- java - 没有为 public com.phonepe.gandalf.models.authz.Permission 类型的参数找到注入源
- angular - 构建 Angular CLI 主题