【问题标题】:users storing own data . Mysql table name taken from session variable [duplicate]用户存储自己的数据。 Mysql表名取自会话变量[重复]
【发布时间】:2016-06-14 15:23:34
【问题描述】:

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

<?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
    )";
    $conn->exec($sql);
    echo " created successfully";
    }
catch(PDOException $e)
    {
    echo $sql . "<br>" . $e->getMessage();
    }

$conn = null;
 }
}
?>

【问题讨论】:

  • 您的代码中有语法错误,如果那是您的真实代码。

标签: php mysql session


【解决方案1】:

您可以尝试修复您的 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;
}
?>

【讨论】:

  • 我尝试了代码但仍然无法插入mysql。有什么可能吗?
  • 我修复了答案。尝试将 $conn->exec($sql) 替换为 $dbh->exec($sql)。因为你的 pdo 对象是 $dbh 而不是 $conn。
【解决方案2】:

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

        $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
        )";

即使它与主题并不真正相关,您也应该问问自己,为每个用户创建一个表是否是最佳解决方案。

【讨论】:

  • 据我所知:/任何方向都会很棒。链接或一些例子......谢谢
  • 为什么要为每个用户创建一个表?为了“别人看不到”?如果是,您可以在那里查看:stackoverflow.com/questions/17075424/…stackoverflow.com/questions/34125900/… 代码是否适用于修复程序?
  • 谢谢 没有代码仍然不起作用。而且我在 dreanweaver 中没有收到任何语法错误。在 Msql 中没有插入任何内容。
猜你喜欢
  • 2013-04-10
  • 2015-12-01
  • 2015-10-09
  • 1970-01-01
  • 2011-04-17
  • 2011-08-30
  • 1970-01-01
  • 2019-09-11
相关资源
最近更新 更多