此问题已在此处有答案:
How can I prevent SQL injection in PHP?(27个回答)
2天前关闭。
我在ExtJS 4的帮助下使用PHP,根据用户输入的登录凭证查询数据库。在ExtJS部分,我有一个存储,我设置了额外的参数并调用load。加载后,我检查存储计数,以查看查询是否返回了一个值,该值将确定用户是否传递了有效的登录凭据。
当我只是简单地从一个工作的php从另一个文件复制粘贴的代码时,我惊讶地挣扎着使这个工作。起初我以为我没有正确地传递值,但是在将传递的值附加到消息之后,它表明我正在完美地传递值。
接下来我试着通过localhost:8888/../../../../../readUser.php
从浏览器调用php文件,我做了一个if else块,如果没有提供登录凭证(电子邮件和密码),代码将转到else块。在if-else块中,我对电子邮件和密码进行了硬编码,以查看它是否会返回任何内容。然而,在调用php文件时,我仍然没有得到任何东西。
下面是我的readUser.php
文件:
<?php
require_once('../../db_mysqli.php');
require_once '../../lib/response.php';
require_once '../../lib/request.php';
class user{
var $user_id;
var $first_name;
var $last_name;
var $sex;
var $birth_date;
var $email;
var $password;
}
$res = new Response();
$res->message = "Message Start. ";
if(isset($_GET['email'])){
//this is the part if the email param is set
}
else{
$res->message.= " \n nothing received. ";
$query = "SELECT * FROM user_details
WHERE email = '[email protected]' AND password = '123'";
$result = mysql_query($query);
$res->message.= " \n query = ";
$res->message.= $query;
$res->message.= " \n result = ";
$res->message.= $result;
}
$query_array=array();
$i=0;
//Iterate all Select
while($row = mysql_fetch_array($result)){
//Create New User instance
$inputData = new user();
//Fetch User Info
$res->message.= " \n user id = ";
$inputData->user_id=$row['user_id'];
$inputData->first_name=$row['first_name'];
$inputData->last_name=$row['last_name'];
$inputData->sex=$row['sex'];
$inputData->birth_date['birth_date'];
$inputData->email=$row['email'];
$inputData->password=$row['password'];
//Add User to ARRAY
$query_array[$i]=$inputData;
$i++;
}
mysql_close($con);
//Creating Json Array needed for Extjs Proxy
$res->success = true;
// $res->message = "Loaded read data";
$res->total = $total;
$res->data = $query_array;
//Printing json ARRAY
print_r($res->to_json());
?>
当我从浏览器调用这个函数时,得到的结果是:
{"success":true,"message":"Message Start. \n nothing received. \n query = SELECT * FROM user_details \n\t\t\t\tWHERE email = '[email protected]' AND password = '123' \n result = ","total":null,"data":[]}
我复制了它在phpMyAdmin上使用的查询(在删除特殊/转义字符之后),它返回了我想要的正确行。
我在while循环中也有一个消息部分,在那里我循环遍历行并将它们附加到结果中。然而,pat $res->message.= " \n user id = ";
没有出现,我给我的印象是我的变量$result
是null或空的,这就是为什么它根本不工作。
接下来我可以尝试什么?
1条答案
按热度按时间xmakbtuz1#
下面是正确的编码方式。
这是有效的。所以
$result
将有一个资源。通过给出var_dump($result);
作为@Darren提到的下一行来检查这一点。[* 请确保在运行查询之前正确建立连接。*]