很混乱PDO php exec()连接问题

时间:2013-05-13 09:46:16

标签: php pdo exec

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

我将以下片段拼凑在一起以说明我的观点。

$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打印到浏览器中的屏幕。任何想法都表示赞赏。

1 个答案:

答案 0 :(得分:0)

你的代码片段错了。它应该没有无用的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);告诉您变量范围可能存在的问题

也很重要