【问题标题】:Very Confusing PDO php exec() connection issue非常令人困惑的 PDO php exec() 连接问题
【发布时间】:2013-05-13 09:46:15
【问题描述】:

在使用 exec() 通过 PHP PDO 连接数据库时遇到了一个非常令人困惑的问题。

我整理了以下 sn-p 来说明我的观点。

$host = "localhost";
$db_name = "some_db";
$user_name = "some_user";
$pass_word = "some_password";

try {
// assign PDO object to db variable
$dbh = new PDO("mysql:host=$host;dbname=$db_name;charset=utf8", $user_name, $pass_word, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
echo "yahoo connected";
}
catch (PDOException $e) {
//Output error - would normally log this to error file rather than output to user.
echo "Connection Error: " . $e->getMessage();
}

当我通过浏览器运行这段代码时,它连接正常,但是当我在命令行运行它时,它给出了以下错误:

Connection Error: SQLSTATE[28000] [1045] Access denied for user 'some_user'@'localhost' (using password: NO)

不用说这很令人困惑,因为您可以在上面的代码中看到确实设置了密码,并且连接正常工作并将 yahoo 打印到浏览器的屏幕上。任何想法表示赞赏。

【问题讨论】:

  • some_user 是你真正的数据库登录用户吗?
  • 不,一点也不。出于安全原因,我不会把它放在 SO 上。我刚刚为这个问题编辑了它。
  • 你也改错了吗?用户 'some_user'@'localhost' 的访问被拒绝(使用密码:否)
  • 确实,我只是删除了真实的用户名并放入 some_user 为了完整起见。谢谢。

标签: php pdo exec


【解决方案1】:

你的 sn-p 是错误的。它应该没有无用的 try-catch 块:

$host = "localhost";
$db_name = "some_db";
$user_name = "some_user";
$pass_word = "some_password";


$dsn = "mysql:host=$host;dbname=$db_name;charset=utf8"
$opt = array(
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
    // other options 
);
$dbh = new PDO($dsn, $user_name, $pass_word, $opt);
echo "yahoo connected";

这样您将收到一个完整错误消息,包括堆栈跟踪,它将显示您运行的实际文件 - 其中有使用的是空密码。

error_reporting(E_ALL); 告诉您变量范围可能存在的问题也很重要

【讨论】:

  • 好的,我已经做到了,并设法让它连接到数据库。我的最后一个问题似乎与 IIS 有关。如果我在服务器 cmd 上运行命令,那么它就可以了。但是,如果我尝试使用 exec() 通过浏览器运行它,那么它会失败,什么也不做
猜你喜欢
  • 2020-04-23
  • 1970-01-01
  • 1970-01-01
  • 2015-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多