加密的字符串与db字符串不匹配

时间:2012-11-27 11:20:33

标签: 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";
    $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";

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

更新

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

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

尝试此查询:

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

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

更新:

很抱歉,现在我知道你没有把它保存在DB的base64中:-)尝试比较输入值和DB值,以了解会发生什么。

答案 2 :(得分:0)

您的选择查询不正确。请更改它。您还可以在查询之前使用echo检查查询。 你应该用这个

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