加密字符串与数据库字符串不匹配



我从正在解码的查询字符串中加密了字符串,解码后我正在尝试与数据库字符串匹配,但这不起作用。这是我的代码

<?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();
}
?>

如果像这样使用

$query = "select * from sfrole where email like('malik.adeel@shakarganj.com.pk') LIMIT 1";

然后它可以工作,如果使用 from 变量,那么它不会返回任何内容,请帮助

更新

我正在像这样在 C# 中加密字符串,我在 php 中使用

Convert.ToBase64String(Encoding.Unicode.GetBytes(emailid))

在查询中运行字符串之前,需要对其进行转义。

http://fr2.php.net/function.mysql-real-escape-string.php

<?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();
}
?>
您的

选择查询不正确。请进行更改。 您还可以在查询前使用 Echo 检查查询。你应该使用这个

$query="select * from sfrole where id='$id' and email LIKE 'example@gmail.com'  LIMIT 1"; 

尝试以下查询:

select * from sfrole where email = '$id' LIMIT 1

出于什么原因您使用大括号"{$id}"?我认为如果你想要加密,最好使用 md5,但加密电子邮件并不好。想象一下,您应该向用户发送电子邮件,但在发送之前您应该解密它们,它不可用并且性能更差。

更新:

抱歉,现在我知道您没有将其保存在 DB 的 base64 中:-)尝试比较输入值和数据库值以了解会发生什么。

相关内容

  • 没有找到相关文章