MySQL在选择中识别会话用户的问题

时间:2016-06-30 07:46:43

标签: php mysql

当我从表中选择数据时,我遇到mySQL无法识别会话用户的问题。有人可以指出我正确处理我需要做些什么来解决这个问题吗?

$sql1="SELECT * FROM `Bookings` WHERE `username`={$_SESSION['user']}";

这是我的代码的样子,但它从不提取数据,只是保持空白。

2 个答案:

答案 0 :(得分:1)

首先,您应该检查$_SESSION['user']是否已初始化或具有任何值。

其次,最好将会话用户分配给变量,以避免将来出现与转义引号相关的一些丑陋问题。不要直接在mysql语句中转储会话。

$user_session = $_SESSION['user']; 
$sql1="SELECT * FROM `Bookings` WHERE `username`= $user_session";

#Edit:

正如@Dann指出的那样,使用mysqli / pdo API,用户准备好的语句必须更好,更安全。这是PDO中的一个简单示例。

首先,你必须连接到你的数据库:

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'";

希望这可以解决您的问题