我有一个涉及访问数据库的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"));
}
}
看起来像脚本没有正确发送数据库用户名和密码。发布脚本,包括如何设置这些参数。 – Barmar
当我从浏览器启动脚本时,脚本(使用用户X凭证)工作正常。但是如果我从命令行执行操作,则会出现错误。我希望有人能解释我为什么?我对广泛的SO溢出了眉毛,试图找到提示,但没有成功 – NicolasV
您从'php.ini'获得DB凭证。对于网络服务器和CLI,通常有一个不同的'php.ini',这听起来就像'cli/php.ini'中没有证书一样。 – Barmar