【问题标题】:SELECT query is only SELECTING/CHECKING the first row, how do I SELECT/CHECK allSELECT 查询只选择/检查第一行,我该如何选择/检查所有
【发布时间】:2015-09-12 17:32:45
【问题描述】:

我有一个简单的查询:

$q5 = "select listingid FROM userlisting WHERE userid = '$_SESSION[UserID]'";
$r5 = mysql_query($q5) or die(mysql_error());
$a5 = mysql_fetch_array($r5);

用户列表是多对多关系。它用作查找表。每个用户 ID 可以与多个列表 ID 相关联,反之亦然。

在我的文件(一个 html 模板文件)中我也有这段代码

if(!empty($_SESSION[UserID]) and $a5['listingid'] == $_GET['id']) :

所以我想检查 userlisting 表中的 listingid 列是否 = 页面的 id(嗯,它是一个属性网站,它是属性的 id)。由于每个用户都可以与许多列表 ID 相关联,因此我需要能够检查多行。但由于某种原因,它只检查第一行。

在 userlisting 表中有以下测试条目: 用户名 |列表id 1 1 1 2

因此,一个用户与两个列表 ID 相关联。但是,它的行为就像这个用户 ID 只与列表 ID 1 相关联,即第一行。

【问题讨论】:

  • 请注意 SQL 查询中的字符串连接。如果用户 ID 可以包含撇号或反斜杠,而无需转义或参数化,则可能会破坏查询或允许注入未经授​​权的 SQL。
  • 如果这就是你所有的代码,你只是获取任何结果集的第一行。另请注意,mysql_*() 已被弃用,将在 PHP 的下一版本中删除。不要将它用于新代码。使用mysqli_*()PDO

标签: php mysql sql arrays database


【解决方案1】:

你只是抓住了第一个条目。

$a5 = mysql_fetch_array($r5);

这不会获取整个查询结果,而只会获取第一行。如果没有,它将返回false

您必须创建一个循环才能获得更多结果。

【讨论】:

  • 对于 OP,我想补充一点,the manual 非常清楚这个函数的作用。经常查看手册:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
相关资源
最近更新 更多