外部配置文件始终不加载数据

时间:2016-12-26 04:29:53

标签: php mysql pdo

非常新的PHP,并且从外部配置文件加载值时遇到问题。我正在将它用于我的数据库连接,有时它会返回值,但有时会返回null。我已经和它斗争了几个小时,似乎无法找到任何关于此的信息。外部文件的格式如下

[database]
db_name = "atmc_timesheet"
db_user = "username"
db_pass = "password"

我正在这样访问它

function connect_db()
{
  $ini = parse_ini_file("../../../atmc_timesheet_config.ini", TRUE);

  $dbhost = 'localhost';
  $db_name = $ini['database']['db_name'];
  $user_name = $ini['database']['db_user'];
  $pass = $ini['database']['db_pass'];

  $dsn = "mysql:dbname=$db_name;host=$dbhost";

  try {
      $pdo = new PDO($dsn, $user_name, $pass);
      $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      return $pdo;
  }
  catch (Exception $e) {
      echo "Error : ".$e->getMessage();
  }

}

它适用于我的登录脚本,但我运行的下一个查询为数据返回null。访问它的两个函数都在同一个php文件中,所以它不是关于坏路径的错误。有什么想法吗?

工作脚本是

function get_login($username)
{
  $pdo = connect_db();
  $stmt = $pdo->prepare('SELECT * from tblemployees where username = :username');
  $stmt->execute(['username' => $username]);
  $user = $stmt->fetch();
  $stmt = null;
  $pdo = null;
  return $user;
}

非工作的是

function get_events_for_calendar($userid)
{
//Gets all userid rows
  $pdo = connect_db();
  $sql = "Select * from tblevents where (employeeId = :uid) order by eventId desc;";
  $stmt = $pdo->prepare($sql);
  $stmt->bindvalue(':uid', $userid);
  $result = $stmt->execute();
  $temp_array = array();
  $event_array = array();
//fetches records and puts in array
  while ($record = $result->fetch()){
    $temp_array[] = array('id' => $record['eventId'], 'empolyeeid' => $record['employeeId'], 'rh' => $record['rh'], 'oh' => $record['oh'],
      'inventory' => $record['inventory'], 'empapproved' => $record['empapproved'], 'mgrapproved' => $record['mgrapproved'],
       'acctapproved' => $record['acctapproved'],);
       $var_dump($temp_array);
  }

echo json_encode($ event_array); }

不工作的那个从用户名和密码的ini文件中获取空值,但获取主机变量的信息。

即使两个查询都在同一个php文件中,它也没有在第二个查询中找到该文件。是否可能没有关闭ini文件,这就是错误的原因。我找不到关于parse_ini后关闭的任何信息。任何想法为什么它都找不到它。

1 个答案:

答案 0 :(得分:0)

  • 您的当前问题是您使用的路径是相对于当前脚本的,因此并不总是指向同一个地方。
  • 您的主要问题是错误报告错误。正确设置后,它会告诉您所有错误,包括您正在使用的错误路径。
  • 您的其他问题是每次调用时都会连接connect_db。
  • 另一个问题是你没有设置非常重要的连接字符集。

您可以在下面找到已编辑的版本。它只连接一次,它使用脚本的绝对路径。你也没有编辑路径。适当的charset也设置 您可以在链接问题中找到有关错误报告的信息 您可以在我的PDO tutorial

中找到有关PDO的更多信息
function connect_db()
{
    static $pdo;
    if (!$pdo)
    {
        $ini = parse_ini_file($_SERVER['DOCUMENT_ROOT']."path/from/root/atmc_timesheet_config.ini", TRUE);

        $dbhost = 'localhost';
        $dbcharset = 'utf8';
        $db_name = $ini['database']['db_name'];
        $user_name = $ini['database']['db_user'];
        $pass = $ini['database']['db_pass'];

        $dsn = "mysql:dbname=$db_name;host=$dbhost;charset=$dbcharest";
        $pdo = new PDO($dsn, $user_name, $pass);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    return $pdo;
}