Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.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和MySQL字符串比较失败_Php_Mysql_String_Comparison - Fatal编程技术网

PHP和MySQL字符串比较失败

PHP和MySQL字符串比较失败,php,mysql,string,comparison,Php,Mysql,String,Comparison,好吧,我的php代码有一个非常恼人的小问题。基本上,我从两个不同的来源提取两个变量。一个是cookie,另一个来自MySQL数据库 $data = explode("|", $_COOKIE['login']); $sql = "SELECT session_id FROM users WHERE username='user1'"; $result = $data->query($sql); $row = $result->fetch_assoc(); $test1 = $dat

好吧,我的php代码有一个非常恼人的小问题。基本上,我从两个不同的来源提取两个变量。一个是cookie,另一个来自MySQL数据库

$data = explode("|", $_COOKIE['login']);
$sql = "SELECT session_id FROM users WHERE username='user1'";
$result = $data->query($sql);
$row = $result->fetch_assoc();

$test1 = $data[0];
$test2 = $row['session_id'];

If($test1 == $test2) {
  // Do some stuff
}
else {
  // Don't do some stuff
}
实际字符串为:

x6vkYu6Ep^lm1Rdm5Gj5Hj7ilL6FsDL88JCn@iTyBUqYgJ489Ow%*2ZdGs1rA8bcJoCD7dywcZgg7soV0D!DpR^pjQwFQpBtHRKe$JEtQ*3LhFXsjmkzWNpt

该字符串在从以下字符集存储之前随机生成: 1234567890!@$%^&*abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvxyz

for($i = 0; $i < 128; $i++) {
  $string .= $char_set[rand(0, strlen($char_set)-1)];
}
$sql = "UPDATE users SET session_id='$string' WHERE user='user1'";
$data->query($sql);
setcookie('login', $string . "|" . $username);
如果我将这两个变量设置为上面的字符串并进行计算,结果会很好。另外,如果我同时回显$data[0]和$row['session_id'],整个字符串都会显示出来,它们看起来是相同的

如果我使用基本字符串,如数字或基本单词,if语句将起作用,因此我猜这是由于特殊字符造成的,但我不知道在这个过程中哪里出错了。正如我所说的,如果我将两个变量设置为该字符串值,它将进行计算,但是当我从MySQL和cookie中提取时,尽管两个字符串看起来相同,但它不会进行计算


有什么想法吗?

php会创建自己的会话id,为什么不直接使用它呢?这里可能会出现拼写错误,但两个代码段的引号都不匹配:第一个在第2行,第二个在第4行。首先,您需要在最后用双引号关闭sql查询$sql=从username='user1'所在的用户中选择会话_id;其次尝试使用If$test1==$test2进行比较。Cheerri修复了引号,抱歉,只是一个输入错误。我还尝试使用if$test1==$test2,但仍然失败。