当我从表中选择数据时,我遇到mySQL无法识别会话用户的问题。有人可以指出我正确处理我需要做些什么来解决这个问题吗?
$sql1="SELECT * FROM `Bookings` WHERE `username`={$_SESSION['user']}";
这是我的代码的样子,但它从不提取数据,只是保持空白。
答案 0 :(得分:1)
首先,您应该检查$_SESSION['user']
是否已初始化或具有任何值。
其次,最好将会话用户分配给变量,以避免将来出现与转义引号相关的一些丑陋问题。不要直接在mysql语句中转储会话。
$user_session = $_SESSION['user'];
$sql1="SELECT * FROM `Bookings` WHERE `username`= $user_session";
首先,你必须连接到你的数据库:
try {
$db = new \PDO("mysql:host=localhost;dbname=xx;charset=utf8", "xx", "xx", [
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);
} catch(\PDOException $e){
echo "Error connecting to mysql: ". $e->getMessage();
}
然后只需获取预订,如下所示。
$user_session = $_SESSION['user'];
try{
$stmt = $db->prepare("SELECT * FROM Bookings WHERE username = ?");
$result = $stmt->execute([$user_session]);
if($result){
// show booking
}
} catch(\PDOException $e){
echo "Counld not get user bookings. error: " . $e->getMessage();
}
现在,您的查询对于mysql注入攻击更安全,连接错误只会抛出异常,而不是显示可能有害的错误。
答案 1 :(得分:0)
您可以使用
$user=$_SESSION['user'];
$sql1="SELECT * FROM Bookings WHERE username= '$user'";
希望这可以解决您的问题