2016-02-03 61 views
-1

我有一个涉及访问数据库的PHP脚本。使用的凭据不是来自用户X. whan我从浏览器运行脚本,没有问题。MySQL - 错误1045 - 访问被拒绝从壳

但是,当我从壳(或cron作业)运行时,我得到一个错误:

SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: NO)
PHP Notice: Undefined variable: conn in....

如果我从shell中运行,记录为用户X,同样的错误。

,使问题在脚本中的函数:

function get_data_from_db($sql){// 
    $hostdb=DB_HOST; //DB credentials are stored in php.ini, retrieved in another part of the script 
    $namedb=DB_NAME; 
    $userdb=DB_USER; 
    $pwddb=DB_PASS; 

    try { 
     $conn = new PDO("mysql:host=$hostdb; dbname=$namedb;", $userdb, $pwddb); 
     $conn->exec("SET CHARACTER SET utf8");  // Sets encoding UTF-8 
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    } 
    catch(PDOException $e) { 
     echo $e->getMessage(); 
    } 
    $statement = $conn->prepare($sql); 
    $statement->execute(); 
    return $statement; 

}

我ALDO从root用户凭证尝试,同样的问题

下面,是可以获得凭证的功能,失败当从CLI运行时

function loadConfig($myapp, $vars = array()) { 
    foreach($vars as $v) { 
     define($v, get_cfg_var($myapp.".cfg.$v")); 
    } 
} 
+2

看起来像脚本没有正确发送数据库用户名和密码。发布脚本,包括如何设置这些参数。 – Barmar

+0

当我从浏览器启动脚本时,脚本(使用用户X凭证)工作正常。但是如果我从命令行执行操作,则会出现错误。我希望有人能解释我为什么?我对广泛的SO溢出了眉毛,试图找到提示,但没有成功 – NicolasV

+0

您从'php.ini'获得DB凭证。对于网络服务器和CLI,通常有一个不同的'php.ini',这听起来就像'cli/php.ini'中没有证书一样。 – Barmar

回答

0

您需要添加数据库CLI版本php.ini的凭证。它们目前只在CGI或PHP-FPM版本中(以您的网页配置使用者为准)。

+0

Bingo!那就是诀窍,谢谢! – NicolasV

相关问题