我从正在解码的查询字符串中加密了字符串,解码后我正在尝试与数据库字符串匹配,但这不起作用。这是我的代码
<?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 中:-)尝试比较输入值和数据库值以了解会发生什么。