PHP输出数据库存储的password_hash哈希值时的转义错误解决
解决PHP输出password_hash哈希值时报错的问题
这问题我之前也碰到过,核心原因其实是PHP对双引号字符串的解析规则在搞鬼!你直接用双引号包裹哈希值时,里面的$符号会被PHP当成变量标识符去解析,但这些$2y、$10之类的根本不是你定义的变量,自然就会报错。下面给你几个靠谱的解决办法:
最简便的方案:用单引号包裹哈希字符串
单引号在PHP里不会解析内部的变量,会原封不动输出所有字符。比如你原来的代码改成这样就没问题了:echo '$2y$10$LYTZuvb7Ff2NeqxLjkp3KeZQmBrq3iaZ4eeY/cuUqz2nGA6wYgENq';从数据库获取时的正确姿势
其实从数据库读取哈希值后,直接输出变量就行,不需要额外处理。因为查询返回的是字符串类型的原始哈希值,变量里的$只是普通字符,不会触发PHP的变量解析。举个PDO的例子:// 假设已连接数据库,用PDO查询 $stmt = $pdo->prepare("SELECT password_hash FROM your_table WHERE id = ?"); $stmt->execute([1]); // 替换成你的查询条件 $storedHash = $stmt->fetchColumn(); // 直接输出即可,完全不会报错 echo $storedHash;用mysqli的话逻辑也是一样的,只要正确获取字段值,直接echo变量就ok。
如果一定要用双引号:转义$符号
这种方法比较繁琐,但也能解决问题——在每个$前面加反斜杠\,告诉PHP这只是普通字符,不是变量。比如:echo "\$2y\$10\$LYTZuvb7Ff2NeqxLjkp3KeZQmBrq3iaZ4eeY/cuUqz2nGA6wYgENq";
内容的提问来源于stack exchange,提问作者Fireal
相关产品推荐
相关产品推荐

