提问者:小点点

PHP中仅来自MySQL表的用户行



我正在创建一个客户区类型的网站在PHP或web主机管理,这将有客户端的详细信息,也有他们的web帐户的详细信息。

这是我的桌子

ID----USER----NAME----ACCOUNT----PASSWORD
1----user1----name1----accont1----password2
2----user1----name2----accont2----password2
3----user3----name3----accont3----password3

现在我想知道的是,如何才能只获得user1的帐户详细信息,并以PHP显示。 像这样,

You are user1
Your Accounts are accont1 & accont2 and 
their passwords are password1 & password2 and 
their name is name1 & name2

顺便说一句! name1和name2是托管帐户的名称,我使用PDO连接到mySQL
谢谢!!!

编辑:这就是我如何手动创建变量并将其插入到我的HTML中

$id2 = "2";
$stmt2 = $conn->query("SELECT * FROM accounts WHERE ID = $id2");
$row2 = $stmt2->fetch();
$uname2 = $row2['account'];
$label2 = $row2['name'];

现在我需要的是我想要显示id 1&; 2自动登录后,如果你请帮助我如何做那太!!! 我是一个初学者,所以请考虑帮助!!!


共1个答案

匿名用户

使用PDO,我们不需要在查询中插入内联变量,而是对它们进行参数化。 这有助于防止SQL注入攻击,并遵循最佳实践。 我们用问号表示变量的位置。

SELECT NAME, ACCOUNT FROM accounts WHERE ID = ?

为了将变量作为参数赋给查询,我们使用了一个数组--在本例中,我们只处理1个变量。

    $stmt->execute([$id]);

PDO是可遍历的,因此我们可以使用foreach迭代结果。 通过使用.=,我们可以将新数据连接到变量中现有数据的右边。 我们还可以使用计数器来知道什么时候需要添加“与”和“间距”。

$id = "1";
$stmt = $pdo->prepare('SELECT NAME, ACCOUNT FROM accounts WHERE ID = ?');
$stmt->execute([$id]);
$i = 0;
foreach ($stmt as $row)
{
    if ($i > 0) {
        $accounts .= ' & ';
        $names .= ' & ';
    }
    $accounts .= $row['NAME'];
    $names .= $row['ACCOUNT'];
    $i++;
}
echo "Your Accounts are $accounts and <br>";
echo "Their names are $names";

我故意跳过了密码字段。 密码字段不应以明文格式存储数据。 如果数据库被攻破,所有这些密码都会泄露。 最好的做法是对密码进行散列,并存储散列值。

关于这个题目的文章很多。 我建议任何运行PHP7.2+的人查看Argon。