gpt4 book ai didi

php - PDO 连接密码不能有 $ # !人物

转载 作者:行者123 更新时间:2023-11-29 01:09:43 27 4
gpt4 key购买 nike

我用! @ # $ 在我的 MySQL 用户的密码中

但是当我在密码中使用这些字符时,PDO 无法连接到 MySQL 服务器

$servername = "localhost";
$username = "test";
$password = "!@#$test";
$dbname = "test";

try {
$test = $_POST['test'];
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username,
$password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// prepare sql and bind parameters
$stmt = $conn->prepare("INSERT INTO test (test)
VALUES (:test)");
$stmt->bindParam(':test', $test);


$stmt->execute();

它给出了这个错误:

SQLSTATE[HY000] [1045] Access denied for user 'test'@'localhost' (using password: YES)

从密码中删除 !@#$ 时它可以正常工作

最佳答案

这与 UTF-8 无关。

PHP 认为您有一个分配了 $ 的变量名。

带双引号的 $password = "!@#$test"; 在技术上正在寻找一个名为 $test 的变量并尝试解析它。

需要用单引号:

$password = '!@#$test';

注意:!@ 在 PHP 中也有特殊含义。

  • ! 不是
  • @ 是错误抑制器和电子邮件中使用的字符。
  • #是注释符。

理论上,错误报告应该向您发出关于 undefined variable 的通知。

UTF-8 处理查询时无法正确显示的查询和字符,具体取决于数据库/表的排序规则。

如果您开始在查询输出中看到 ?,那么您需要将连接的 DSN 设置为 UTF-8。

这在以下问答中有介绍:

关于php - PDO 连接密码不能有 $ # !人物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45224651/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com