Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 无法从数据库中获取单个字段_Php_Mysql - Fatal编程技术网

Php 无法从数据库中获取单个字段

Php 无法从数据库中获取单个字段,php,mysql,Php,Mysql,当我尝试这样做时,它会获取整个列,而不仅仅是一个字段 $connection = mysqli_query($db, "SELECT * FROM users"); <?php while($row = mysqli_fetch_array($connection)) { ?> <p>Your balance is: <?php echo $row['balance']; ?></p> <?php } ?> 我所得到的只是一个

当我尝试这样做时,它会获取整个列,而不仅仅是一个字段

$connection = mysqli_query($db, "SELECT * FROM users");




<?php
while($row = mysqli_fetch_array($connection)) {
?>
<p>Your balance is: <?php echo $row['balance']; ?></p>
<?php
}
?>

我所得到的只是一个白色的屏幕

我能感觉到发生了什么。如果列的某个位置具有唯一的ID,则在获取整个数据库时既不使用限制1,也不使用WHERE子句。我确信您的数据库表中有多条记录

我本打算在评论中发表这篇文章,但决定不发表。Stack并不是真的希望我们这么做,编辑,在这一点上,评论太长了

@ADyson我最初想显示登录用户的余额,但没有成功标记黑暗

关于那件事。似乎您正在寻找的是获得用户/记录的平衡。为此,您肯定需要使用WHERE子句

如果查询失败,请启用错误报告并检查查询中的错误

参考资料:

加上$i=0;和$i++;可能没有帮助。很难说那应该做什么。我知道语法,我只是不知道你为什么要增加它


旁注:我将避免使用$connection作为查询变量赋值。这可能令人困惑。尝试使用一些清晰的东西,比如$query\u进行选择。

我认为这里可能需要一个基本的小教程

首先:从用户选择*意味着:给我用户表中的所有内容。您将得到完整的表、每一行和每一列

而$row=mysqli\u fetch\u array$连接将循环查询返回的每一行。它将调用mysqli_fetch_数组并将结果放入$row中,直到查询结果中不再有行为止

如果只想输出一行数据,则有三个选项:

添加WHERE条件,以便查询仅获取特定行 添加一个LIMIT子句,以便查询只获取一行 只调用mysqli_fetch_数组一次,而不是在while循环中 从讨论线程中的注释来看,您似乎只想检索当前登录用户的余额,并且您在某个地方有一个会话变量,告诉您该用户是谁。这意味着您需要使用WHERE条件,以便查询仅获取该特定用户的行

您没有告诉我们该会话变量的名称,或者您可以将该会话变量与users表中的列进行比较的列的名称,因此我假设您的users表有一个id列,您的会话变量称为user_id,并且应该与users表中的id值相匹配

假设id为123的用户当前已登录。您将希望以查询SELECT balance FROM users结束,其中id=123

快速解决方案是将代码更改为:

$connection=mysqli_query$db,选择id=的用户余额$_会话['user_id']

这是错误的代码。我们会做得更好,但是先试试这个,看看它是否能让你得到你真正想要的结果。如果没有,请告诉我

这是错误代码的原因是,向这样的查询字符串添加变量会显著增加SQL注入的风险。如果变量的值有可能来自用户输入,那么在某个时候,用户会发现并确保它包含一些会破坏应用程序的内容

最佳情况场景:页面根本不会为该用户呈现。 坏情况:用户将能够读取您的整个数据库,并将敏感用户数据出售给出价最高的投标人。 最坏情况:用户将能够将自己的一些Javascript代码注入到数据库中的列中,而在呈现之前,您没有对该列进行清理,让他们捕获并截获用户在您的网站上输入的密码和/或财务信息,然后他们将使用这些信息让所有用户的生活变得悲惨。 因此,您不希望像这样将$\u SESSION['user\u id']放入您的查询中。相反,您需要使用一个准备好的语句,让数据库处理将变量放入查询中的问题

首先,您需要准备查询:

$statement = mysqli_prepare($db, "SELECT balance FROM users WHERE id = ?");
那个?符号是一个占位符,可以在其中绑定参数。让我们这样做:

$statement->bind_param("i", $_SESSION['user_id']);
i告诉MySQL您正在绑定一个整数值。例如,如果您不匹配用户id,而是用户名,那么您需要使用s来告诉MySQL您正在绑定一个字符串值

现在您可以执行查询并获得结果。总而言之:

$statement = mysqli_prepare($db, "SELECT balance FROM users WHERE id = ?");
$statement->bind_param("i", $_SESSION['user_id']);
$statement->execute();
$connection = $statement->get_result();

让我们知道这是否有效。可能需要进行一些调整。

澄清一下:您只想输出单个用户的余额,而不是查询返回的所有用户的余额?我最初想显示登录用户的余额,但没有成功。-关于那件事。所以我是对的。那是我贴的
在我下面的回答中。如果它不起作用,那么可能是您的查询错了,或者有错误@markthedark@markthedark那是行不通的。。。。好啊所以请帮助我们…在您的应用程序中,您如何知道用户已登录?这是会议的结果吗?为了获取单个用户的数据,您尝试了什么?如果我们不知道你写了什么,或者到底出了什么问题,那么很难修复你的代码或找出问题所在。我得到的只是一个白色屏幕,好的,那么首先,数据库中是否有人的余额正好为3的行?此外,由于它是一个数字,您是否尝试使用balance=3而不是balance='3',引号使其成为字符串?最后,如果没有打开错误报告,则白色屏幕可能是崩溃的症状。根据我对以下答案的评论,请确认您已成功打开报告和/或日志记录,以及您是否在屏幕上或指定日志文件中报告了任何错误。好的,我再次重复我先前的问题:在您的应用程序中,您如何知道用户已登录?也许是会议上的?这很常见。但我们实际上不知道您的应用程序是如何设置的。另外,在users表中是否有包含用户ID的特定列?基本上,您需要在SQL中编写WHERE子句,该子句尝试将应用程序中登录的用户ID与该列中的用户ID值相匹配。如果没有您提供更详细的信息,我将无法说得更具体。每当我尝试使用限制为1或WHERE子句时,它最终甚至不会输出任何内容。@标记该标记表示任何人都不足以帮助您。请给出一个或多个例子,说明你到底做了什么,结果是什么。如果它没有输出任何内容,则可能是由于某种原因PHP崩溃了。确保已打开错误日志记录以避免出现这种情况,这样您就可以看到可能出现的错误。请参阅php错误记录/报告和mysqli异常处理以获取指导
$statement->bind_param("i", $_SESSION['user_id']);
$statement = mysqli_prepare($db, "SELECT balance FROM users WHERE id = ?");
$statement->bind_param("i", $_SESSION['user_id']);
$statement->execute();
$connection = $statement->get_result();