You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:39:18