Php 加密字符串与db字符串不匹配
我对正在解码的查询字符串进行了加密。解码后,我试图与db字符串匹配,但这不起作用。这是我的代码Php 加密字符串与db字符串不匹配,php,c#-4.0,Php,C# 4.0,我对正在解码的查询字符串进行了加密。解码后,我试图与db字符串匹配,但这不起作用。这是我的代码 <?php require_once("db.php"); $id=""; $emailrole=""; if($_GET){ if(isset($_GET['id'])){ $id = base64_decode($_GET['id']); $query = "select * from sfrole where email like('{$id}') LIMIT 1"
<?php
require_once("db.php");
$id="";
$emailrole="";
if($_GET){
if(isset($_GET['id'])){
$id = base64_decode($_GET['id']);
$query = "select * from sfrole where email like('{$id}') LIMIT 1";
$qryy = mysql_query($query);
$cnt = mysql_num_rows($qryy);
if($cnt > 0){
$emailrole = mysql_fetch_array($qryy);
}else{
exit();
}
}else{
exit();
}
}else{
exit();
}
?>
然后它工作,如果使用变量,那么它不会返回任何东西,请帮助
更新
我正在用C加密字符串,就像我在php中使用的那样
Convert.ToBase64String(Encoding.Unicode.GetBytes(emailid))
请尝试以下查询:
select * from sfrole where email = '$id' LIMIT 1
为什么使用大括号{$id}?我认为如果你想加密,最好使用md5,但加密电子邮件并不好。想象一下,您应该向用户发送电子邮件,但在发送之前,您应该对其进行解密,因为它不可用,而且性能更差
更新:
很抱歉,现在我了解到您没有将其保存在数据库中的base64中:-尝试比较输入值和数据库值以了解发生了什么。在查询中运行字符串之前,您需要对其进行转义
您的select查询不正确。请更改它。您还可以在查询之前使用echo检查查询。 你应该用这个
$query="select * from sfrole where id='$id' and email LIKE 'example@gmail.com' LIMIT 1";
那么,base64_解码$_得到什么['id'];回来$\u GET['id']包含什么?尝试回显$query,看看您得到了什么?它包含电子邮件malik。adeel@shakarganj.com.pkBecause在查询中运行字符串之前,需要对其进行转义。查看mysql\u real\u escape\u string.LIKE是一个比较而不是一个函数。比如说“%something%”。但是,没有必要像这里这样使用。你正在寻找一个完美的匹配,尽管它不区分大小写而不是部分匹配。{$var}意味着你不必在这里使用字符串。$var.烦人的连接:也适用于数组:,hello{$array['blah']}你使用大括号来包含变量,这是完全有效的。大括号不会包含在最终查询中。user1820339,请尝试比较DB中的值和输入值,可能其中一个值中有空格或其他内容。如果后面有单词字符,则需要大括号,例如,$object->noon存在的地方,我有两个{$object->noon}。将工作,但我有两个$object->名词。将被错误解析,因为$object->nomes不是您要查找的变量。不过,我使用了恼人的连接方式,更容易阅读,其他程序员也更容易阅读您的代码。明白了吗,但它们出现在这个示例中的原因是什么?没有他们,一切都会成功。下面是大括号{$square->width}00或Dale的hello{$array['blah']}的真实示例。这是base64为什么要使用mysql_real_escape_字符串?它是base64。您对其进行了解码,并将解码后的数据分配给变量id。仅当我执行此$query=select*from sfrole where email like'malik时,它才起作用。adeel@shakarganj.com.pk"限额1,;虽然这是正确的,但没有必要像这里这样使用;如果不包含用于查找部分匹配的字符,则它也可能是=有关详细信息,请参阅我的更新
<?php
require_once("db.php");
$id="";
$emailrole="";
if($_GET){
if(isset($_GET['id'])){
$id = base64_decode($_GET['id']);
$query = "SELECT * FROM sfrole WHERE email LIKE '" . mysql_real_escape_string($id) . "' LIMIT 1";
$qryy = mysql_query($query);
$cnt = mysql_num_rows($qryy);
if($cnt > 0){
$emailrole = mysql_fetch_array($qryy);
}else{
exit();
}
}else{
exit();
}
}else{
exit();
}
?>
$query="select * from sfrole where id='$id' and email LIKE 'example@gmail.com' LIMIT 1";