【问题标题】:sql/php - how to retrieve row-values that have shared values into php variables? [duplicate]sql/php - 如何将具有共享值的行值检索到 php 变量中? [复制]
【发布时间】:2021-07-31 15:48:15
【问题描述】:

我有下面的sql表

 imgname  | extension | project
 ---------|---------------------
 img1     | jpg       | testproject
 img20    | jpg       | testproject
 img31    | jpg       | testproject
 ...

我想检索“project”“testproject”的“imgname”和“extension”的值,并将其存储在单独的 php 变量中。由于表中的行数是可变的,我需要动态添加它们或在获取结果中使用数组。但是我该怎么做呢?

我的 sql/php 知识只给我带来了这么多:

$sql=mysqli_query($con,"SELECT imgname FROM images WHERE project='testproject'");
$row=mysqli_fetch_array($sql);
$imagename= $row['imgname'];

【问题讨论】:

  • 你正在做的应该工作,那么有什么问题?你问如何选择多列?只需用逗号分隔它们即可。
  • @Dharman 我认为他们对查询返回多行时该怎么做感到困惑。
  • 那么我们已经有了这样的答案
  • 如果你刚刚开始学习 PHP,那么你应该学习 PDO 而不是 mysqli。 PDO 更容易,更适合初学者。从这里开始phpdelusions.net/pdo & websitebeaver.com/…

标签: php sql mysqli


【解决方案1】:

你是对的,你可以使用数组。根据您以后如何使用数据,有(至少)两种可能的结构:

  1. 三个单独的数组 - 一个图像名称列表、一个扩展名和一个项目。

  2. 从数据库中检索到的每一行包含一个条目的单个数组,该行的字段位于其中的关联数组(或对象)中。

在大多数情况下,选项 2 可能更有用,因为它不会将数据与逻辑上属于它的其他数据项分离。 (例如,有扩展名但没有文件名可能有点没用。你可以尝试通过数组索引来匹配它,但你会想——为什么要分开它开始呢?)

下面是您如何实现选项 2 的示例。请注意使用 mysqli_fetch_assoc 而不是 mysqli_fetch_array,这样您就可以将每一行作为一个关联数组,其中包含键的列名,而不仅仅是数字。

$sql = mysqli_query($con,"SELECT imgname FROM images WHERE project='testproject'");
$data = array(); //create an empty array

//loop over all the rows
while ($row = mysqli_fetch_assoc($sql)) {
  $data[] = $row; //add the whole row to the array
}

var_dump($data); //debugging output, just so you can see the result

您也可以使用mysqli_fetch_all 将所有结果一次性放入一个数组中:

$data = mysqli_fetch_all($sql, MYSQLI_ASSOC);

【讨论】:

  • 说实话,我觉得这个答案一点用都没有。为什么建议解耦值,为什么建议奇怪的 while 循环语法,为什么不直接使用 fetch_all?
  • @Dharman 我强烈建议解耦值。我列出了进行比较的选项,因为 OP 提到将不同的字段存储在“单独的变量”中,所以我想通过示例清楚地解释为什么在大多数情况下这可能不是一个好主意。 (但同样你不能说有人可能想要这样做的情况为 0。)。 why suggest the weird while loop syntax ...在您看来,这有什么“奇怪”的?人们一直都在这样做——如果他们想在处理过程中改变输出数组的结构,也许更是如此,但仍然如此。
  • @nickadams77181 没问题。如果答案帮助您解决了问题,请将其标记为“已接受” - 请参阅 stackoverflow.com/help/someone-answers - 谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-19
  • 2016-01-24
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 2013-03-13
相关资源
最近更新 更多