当我尝试执行此操作时,它将获取整个列,而不仅仅是一个字段。
$connection = mysqli_query($db, "SELECT * FROM users");
<?php
while($row = mysqli_fetch_array($connection)) {
?>
<p>Your balance is: <?php echo $row['balance']; ?></p>
<?php
}
?>
那是输出 您的余额为:5 您的余额为:0 您的余额为:
所以我尝试了
$query_for_selecting = mysqli_query($db, "SELECT balance FROM users");
<?php if (mysqli_num_rows($query_for_selecting) > 0) { ?>
<?php while($row = mysqli_fetch_assoc($query_for_selecting)) { ?>
<p>Your balance is <?php $row['balance']; ?></p>
<?php } ?>
<?php } ?>
那并没有输出任何东西,所以最终,我尝试使用WHERE
子句,限制为1
$query_for_selecting = mysqli_query($db, "SELECT * FROM users WHERE balance = '3' DESC LIMIT 1");
<?php if (mysqli_num_rows($query_for_selecting) > 0) { ?>
<?php while($row = mysqli_fetch_assoc($query_for_selecting)) { ?>
<p>Your balance is <?php $row['balance']; ?></p>
<?php } ?>
<?php } ?>
我只有一个白屏
答案 0 :(得分:2)
我对正在发生的事情有一种感觉。假设您在某处有唯一的ID,那么您将在不使用LIMIT 1和/或使用WHERE
子句的情况下获取整个数据库。我确定您的数据库表中有不止一条记录。
我打算在评论中发布此内容,但决定不发布。 Stack真的不希望我们这样做( edit ),此时,发表评论的时间太长了。
@ADyson“最初,我想显示已登录用户的余额,但无法解决。” – markthedark
关于。似乎您正在寻找的是特别是要获得用户/记录的余额。为此,您肯定需要使用WHERE
子句。
如果查询失败,请启用错误报告并检查查询中的错误。
参考:
此外,$i = 0;
和$i++;
可能无济于事。很难说应该做什么。我知道语法,只是不知道为什么要增加它。
旁注:我将避免使用$connection
作为查询变量分配。这可能会令人困惑。尝试使用诸如$query_for_selecting
之类的明确名称。
答案 1 :(得分:2)
我认为这里可能有一个基本的小教程。
首先,SELECT * FROM users
的意思是:“给我users
表中的所有内容”。您将获得完整的表格,每一行和每一列。
while($row = mysqli_fetch_array($connection))
将遍历查询返回的每一行。它将调用mysqli_fetch_array()
并将结果放入$row
中,直到查询结果中没有更多行。
如果只想输出一行数据,则有三个选择:
WHERE
条件,以便您的查询仅获取特定的行LIMIT
子句,以便您的查询仅获取单行mysqli_fetch_array()
,而不是while
循环从讨论主题中的注释中,您似乎想只为当前登录的用户检索{em> balance
,并且在某处有一个会话变量可以告诉您该用户是。这意味着您将要使用WHERE
条件,以便您的查询仅获取该特定用户的行。
您尚未告诉我们会话变量的名称或users
表中与该会话变量进行比较的列的名称,因此我假设您的{{1 }}表中有一个users
列,您的会话变量称为id
,应与您的user_id
表中的id
值匹配。
因此,假设users
123的用户当前已登录。您将以查询id
结尾。
快速的解决方案是将代码更改为:
SELECT balance FROM users WHERE id = 123
。
这是错误的代码。我们会做的更好,但是请先尝试一下,看看它是否能为您带来实际想要的结果。如果没有,请告诉我。
原因 这是错误的代码,因为这样向查询字符串中添加变量会大大增加SQL注入的风险。如果该变量的值完全有可能来自用户输入,则在某个时候,用户 会弄清楚这一点,并确保它包含会破坏您的应用程序的内容。
- 最佳情况:该页面根本不会为该用户呈现。
- 糟糕的情况:用户将能够读出您的整个数据库,并将敏感的用户数据出售给出价最高的人。
- 最坏的情况:在呈现之前,用户将能够在您未消毒的列中向数据库注入自己的一些Javascript代码,从而使他们能够捕获和拦截用户输入的密码和/或财务信息您的网站,他们将使用这些信息使所有用户的生活痛苦不堪。
因此,您不想像这样将$connection = mysqli_query($db, "SELECT balance FROM users WHERE id = " . $_SESSION['user_id']);
放入查询中。相反,您将要使用准备好的语句,并让数据库处理将变量放入查询的问题。
首先,您需要$_SESSION['user_id']
查询:
prepare
$statement = mysqli_prepare($db, "SELECT balance FROM users WHERE id = ?");
符号是一个占位符,您可以在其中?
一个参数。让我们做到这一点:
bind
$statement->bind_param("i", $_SESSION['user_id']);
告诉MySQL您正在绑定一个整数值。例如,如果您不匹配用户"i"
而是用户名,则想使用id
告诉MySQL您要绑定 string 值
现在,您可以"s"
查询并获取结果。全部放在一起:
execute
让我们知道是否可行。可能需要一些调整。