我开始学习PDO
,同时这样做决定重写我的旧mysql_*
代码。所以我有一个登录表单,根据用户级别重定向到不同的位置。这已完成(I think since I can login correctly
)。接下来,当重定向我时,我有查询哪些取决于userlevel显示来自数据库的一些结果。问题是它不会返回任何内容,并且日志文件中没有错误。这是我的登录信息。我做得对吗?PDO查询与会话不会返回任何东西
session_start();
if(isSet($_POST['submit'])) {
include 'misc/database.inc.php';
$pdo = Database::connect();
$username=$_POST['username'];
$password=sha1($_POST['password']);
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
$stmt->bindParam(':username', $username);
$stmt->bindParam(':password', $password);
$stmt->execute();
$res = $stmt -> fetch();
if ($res['userlevel'] == 1)
{
// Save type and other information in Session for future use.
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
$_SESSION['userlevel'] = $userlevel;
header("location: admins/main.php");
}
elseif ($res['userlevel'] >= 4)
{
$_SESSION['user_id'] = $id;
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
$_SESSION['userlevel'] = $userlevel;
$_SESSION['firstname'] = $firstname;
$_SESSION['lastname'] = $lastname;
$_SESSION['user_image'] = $user_image;
$_SESSION['email'] = $email;
header('Location: users/main.php');
}
else
{
header("location: index.php");
}
// Closing MySQL database connection
$pdo = null;
} else {
这是我想在main.php
执行时,根据用户级
<?php
include '../misc/database.inc.php';
$pdo = Database::connect();
$q = "SELECT * FROM ras AS r
LEFT JOIN user_ras AS r2u ON r.userlevel = r2u.ras_userlevel
LEFT JOIN users AS u ON r2u.user_userlevel = u.userlevel where menu = '".$_SESSION['userlevel']."'";
foreach($pdo->query($q) as $res)
{
echo '<a href="users/ras.php?rest_id='. $res['ras_id'] .'">'.$res['name'].'</a>';
}
Database::disconnect();
?>
登录正如我所说的,我完全新的PDO所以请容忍我的查询,如果你能帮我。谢谢。
更新 - database.inc.php
<?php
class Database
{
private static $dbName = 'dbname' ;
private static $dbHost = 'localhost' ;
private static $dbUsername = 'user';
private static $dbUserPassword = 'pass';
private static $cont = null;
public function __construct() {
die('Init function is not allowed');
}
public static function connect()
{
// One connection through whole application
if (null == self::$cont)
{
try
{
self::$cont = new PDO("mysql:host=".self::$dbHost.";"."dbname=".self::$dbName, self::$dbUsername, self::$dbUserPassword);
}
catch(PDOException $e)
{
die($e->getMessage());
}
}
return self::$cont;
}
public static function disconnect()
{
self::$cont = null;
}
}
?>
'在session_start();'必须使用会话的所有文件里面。 – 2014-12-05 19:11:01
是的,我已经把它放在main.php里面了。实际上,当我登录某些用户时,我可以看到他的用户名'<?php echo $ _SESSION ['username']; ?>所以会议是工作。但查询不。 – 2014-12-05 19:13:12
'r2u.user_userlevel'你确定你不是指'r2u.userlevel'?很难说,连接不是我擅长的。在连接打开后立即添加'$ pdo-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION);'。 – 2014-12-05 19:16:47