【问题标题】:PHP Array with Key Values don't match具有键值的 PHP 数组不匹配
【发布时间】:2013-03-07 16:47:37
【问题描述】:

我有一个在 php 中运行的查询。数据库是 SQL Server 2008。 PHP中的查询是:

"SELECT * FROM applicants WHERE applicants.families_id = '{$family_array['id']}'";

$family_array id 与 families_id 匹配。结果我得到了一行。我使用mssql_fetch_array 函数将该行保存到PHP 中的一个数组中。当我打印这个数组时,我得到以下信息:

    Array
(
    [0] => 26
    [id] => 21
    [1] => 21
    [user_id] => 21
    [2] => Kristi
    [mother_fname] => Kristi
    [3] => Lochala
    [mother_lname] => Lochala
    [4] => Nathan
    [father_fname] => Nathan
    [5] => Lochala
    [father_lname] => Lochala
    [6] => 
    [app_emergency] => 
    [7] => 
    [upload_mother_passport] => 
    [8] => 
    [upload_mother_visa] => 
    [9] => 
    [upload_father_passport] => 
    [10] => 0
    [upload_father_visa] => 0
    [11] => nathan-lochala
    [user_added_username] => nathan-lochala
    [12] => Mar 19 2013 01:00:37:660PM
    [user_added_date] => Mar 19 2013 08:48:00:000AM
    [13] => 192.168.88.15
    [user_added_ip] => 192.168.88.15
    [14] => 
    [user_updated_username] => 
    [15] => 
    [user_updated_date] => 
    [16] => 
    [user_updated_ip] => 
    [17] => 21
    [18] => nathan-lochala
    [username] => nathan-lochala
    [19] => b9a234cb37ce2b75d77befecabfa650e39489e0b
    [hash_password] => b9a234cb37ce2b75d77befecabfa650e39489e0b
    [20] => Nathan
    [fname] => Nathan
    [21] => Lochala
    [lname] => Lochala
    [22] => 2
    [num_child] => 2
    [23] => Mar 19 2013 08:48:00:000AM
    [24] => 192.168.88.15
    [25] => 
    [26] => 
    [27] => nathan-lochala@shk.qsi.org
    [email] => nathan-lochala@shk.qsi.org
    [28] => parent
    [access] => parent
)

如果您注意到,index [0] 与对应的键值 [id] 不匹配。为什么是这样?我已经使用 SQL Server 管理器运行了完全相同的查询,它按预期执行,但是当我在 PHP 中获取该数组时,只有第一个键值会倾斜。除了重新创建表格之外,我已经尝试了所有我能想到的方法。有什么想法吗?

编辑: 运行 mssql_fetch_assoc() 会得到以下结果:

Array
(
    [id] => 21
    [user_id] => 21
    [mother_fname] => Kristi

【问题讨论】:

  • 再次在服务器管理器中查询并粘贴结果,以便我们查看。
  • 看起来 26 是 id 而 21 是“外键”
  • 请列出查询返回的所有列。
  • 以上是一个编辑,我添加了数组中的所有列,因此我的表中的所有列。
  • Nathan,我们需要看看列名在 PHP 将它们放入数组之前是什么样子的。查看 SQL Server 的完整结果会更有帮助。

标签: php sql arrays


【解决方案1】:

您没有在发布的 SQL 或您包含的表数据/结构中包含所有相关信息。您的查询是SELECT * FROM applicants WHERE applicants.families_id = ?,但您发布的表结构不包含families_id 列(也未命名为applicants)。它也不包含发布数组中的大部分数据,例如hash_passwordusername 等。

据此,我推断您实际上是在 users 表上进行 JOIN。最有可能发生的是 JOIN 包含来自users 表的id 列,该列将覆盖主表中的id(家庭/申请人,无论它叫什么),一旦构建了数组。 user_id 已包含在您的主表中,因此您应该明确列出 SQL 语句中的列,省略 users.id 列。

【讨论】:

  • 我直到现在才意识到。你是绝对正确的。这里实际上发生了一些事情。我的初始查询,即在我的问题中发布的查询,被脚本不同部分中具有相同变量名的不同查询覆盖。该查询有一个内部连接,它覆盖了我的数组。非常感谢您的解决方案。你很准!
【解决方案2】:

您需要将其设为mssql_fetch_array($result, MSSQL_ASSOC),因为假定为 MSSQL_BOTH。

我在这里找到了答案: http://php.net/manual/en/function.mssql-fetch-array.php

【讨论】:

  • 没有骰子,它们仍然不匹配。它们是数组中的 id 值和表的 id 值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-28
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
  • 2015-01-04
相关资源
最近更新 更多