用户存储自己的数据。从会话变量中获取的Mysql表名

时间:2016-03-01 23:53:29

标签: php mysql session

有人可以帮我处理该代码,欢迎任何指示 我希望每个通过会话的用户都能创建表(每个用户都创建自己的表 - 其他人无法看到它)。

class ImportItem extends Model
{
    protected $table = 'importitems';
    protected $fillable = [
        'region_code',
    ];

    /* 
     * If you have a field region in the Mass Assignment
     * and a field region_code in your database.
     */
    public function setRegionAttribute($value)
    {
        $this->attributes['region_code'] = $value;
    }
    // Same for each attribute! Ugh what a mess!

2 个答案:

答案 0 :(得分:0)

您的查询字符串中有一些错误。你应该删除一个双引号,表名应该用`而不是'包装。所以你的代码应该是这样的:

        $sql = "CREATE TABLE `{$r['username']}` (
            id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
            firstname VARCHAR(30) NOT NULL,
            lastname VARCHAR(30) NOT NULL,
            email VARCHAR(50),
            reg_date TIMESTAMP
        )";

即使它与主题没有真正关联,你应该问自己,每个用户创建一个表是否是最好的解决方案。

答案 1 :(得分:0)

您可以尝试修复您的PHP代码,并获得以下内容:

<?php
session_start();
if($_SESSION['user']==''){
    header("Location:login.php");
}else{
    $dbh=new PDO('mysql:dbname=something;host=127.0.0.1', 'something', 'something');
    $sql=$dbh->prepare("SELECT * FROM users WHERE id=?");
    $sql->execute(array($_SESSION['user']));
    while($r=$sql->fetch()){
        $sql = "CREATE TABLE `".$r['username']."` (
            id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
            firstname VARCHAR(30) NOT NULL,
            lastname VARCHAR(30) NOT NULL,
            email VARCHAR(50),
            reg_date TIMESTAMP
        )";
        try {
            $dbh->exec($sql);
            echo " created successfully";
        } catch(PDOException $e) {
            echo $sql . "<br>" . $e->getMessage();
        }
    }

    $conn = null;
}
?>