使用PHP和MySQL将表行值添加到变量中

时间:2015-05-25 00:48:52

标签: php mysql foreach

这需要一些例子:

例如,这是我的MySql dump.sql文件:

CREATE TABLE IF NOT EXISTS `user` (
`id` int(10) unsigned NOT NULL,
`email` varchar(30) NOT NULL,
`username` varchar(30) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

INSERT INTO `user` (`id`, `email`, `username`) VALUES
(1, 'test1@test.com', 'test1'),
(2, 'test2@test.com', 'test2'),
(3, 'test3@test.com', 'test3');

ALTER TABLE `user`
ADD PRIMARY KEY (`id`);

ALTER TABLE `user`
MODIFY `id` int(10) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=4;

然后我有一个包含数据库连接和函数的db.php文件:

<?php
 define('DB_HOST','localhost');
 define('DB_USER','test');
 define('DB_PASS,'test');

 $conn = mysql_connect(DB_HOST, DB_USER, DB_PASS);
 if(!$conn) {
    die('Could not connect: ' . mysql_error());
 }
 mysql_select_db(DB_USER, $conn);

function get_all($sql)
{
  @$db = new mysqli(DATABASE_HOSTNAME, DATABASE_USERNAME, DATABASE_PASSWORD);
  global $db;
  $q = mysqli_query($db, $sql);
  while (($result[] = mysqli_fetch_assoc($q)) || array_pop($result)) {
    ;
  }
  return $result;
}

之后我有一个看起来像这样的SQL查询:

$users = get_all("SELECT * FROM test.user ORDER BY id");

这为我提供了“用户表”中的所有项目。

之后我有一个使用require_once('db.php')的index.php文件,并且具有以下代码来调用数据库表中的所有项目,如下所示:

<form>
  <table>
    <thead>
      <tr>
        <th>ID</th>
        <th>Email</th>
        <th>Username</th>
      </tr>
    </thead>
    <tbody>
      <?php if (!empty($users)) foreach ($users as $user) { ?>
       <tr>
         <td><?= $user["id"]; ?></td>
         <td><?= $user["email"]; ?></td>
         <td><?= $user["username"]; ?></td>
       </tr>
      <?php } ?>
    </tbody>
  </table>
</form>

所有这些都可以打印出一张包含所有用户列表的表格。 现在我的问题是:如何将“id”,“email”或“username”添加到某种全局变量中,以便稍后使用“id”。

例如我试图将id添加到$ _SESSION:

<td><?= $_SESSION["user_id"] = $user["id"]; ?></td>

如果我回应它,​​那只能告诉我最后一个id:

 <?php echo $_SESSION["user_id"]; ?>

...这给了我“3”

我想问的是:有没有办法从每个表行获取“ID”,“email”或“username”并将其添加到变量中,所以我可以在以后的其他SQL查询中使用它使用“ID”进行UPDATE或DELETE行?

例如,如果我想从“用户”表中删除第二个用户,我可以使用以下内容:

DELETE FROM test.user WHERE ID = $user_id;

我如何获得$ user_id?

1 个答案:

答案 0 :(得分:1)

在每个foreach循环中,您可以按如下方式存储会话数据:

$_SESSION[$user['id']]['email'] = $user['email'];
$_SESSION[$user['id']]['username'] = $user['username'];

然后,当您想要检索电子邮件或用户名时,您只需传入ID。

例如,如果ID为7,要获取电子邮件地址,您可以写:

$_SESSION[7]['email'] 

这将返回ID为7的用户的电子邮件地址。

这应该有所帮助。

$_SESSION['user_id']只显示最后一个ID的原因是因为每次foreach循环运行时,它都会覆盖它,直到你到达循环的最后一次迭代,然后就是你回显的那个。