Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 加密字符串与db字符串不匹配_Php_C# 4.0 - Fatal编程技术网

Php 加密字符串与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"

我对正在解码的查询字符串进行了加密。解码后,我试图与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();
}
?>
然后它工作,如果使用变量,那么它不会返回任何东西,请帮助

更新

我正在用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";