非常新的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后关闭的任何信息。任何想法为什么它都找不到它。
答案 0 :(得分:0)
您可以在下面找到已编辑的版本。它只连接一次,它使用脚本的绝对路径。你也没有编辑路径。适当的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;
}