【问题标题】:PHP Appending an array with an additional Mysql QueryPHP 附加一个带有附加 Mysql 查询的数组
【发布时间】:2011-10-25 10:46:53
【问题描述】:

我希望有人可以展示如何正确地将使用 sql 查询创建的数组与来自第二个查询的数据相附加。

我有一个从 mysql 资源创建的数组,它是正确的。

while($row = mysql_fetch_array($result)){
    $first_pass[] = $row; 
} 

但在完成 $first_pass 数组之前,我想做第二个查询,所以在我添加的 $first_pass 数组之前的 while 循环中;

$p = $row['productid'];
$gle = mysql_query("SELECT value FROM `extra_field_values` WHERE productid = $p' AND fieldid ='11' "); 
$goog = mysql_fetch_row($gle);
$row['google_cat'] = $goog[0]; 

我的问题是,无论我如何将此查询添加到现有数组中,当我转储它时,它看起来不像只是添加到数组中的另一个索引。我已经用我自己创建的索引尝试了 mysql_fetch_row 并且我尝试过使用 mysql_fetch_array 但是它显示为数组中的另一个数组。 我认为它会按原样正常运行,但看起来不合适。 这是转储的样子:

数组0 =>数组 0 => 字符串“3614”(长度=4) 'variantid' => 字符串'3614'(长度=4) 1 => 字符串“1406”(长度=4) 'productid' => 字符串'1406'(长度=4) 2 => 字符串“180-GL-QT-CAY-M”(长度=15) 'productcode' => 字符串'180-GL-QT-CAY-M'(长度=15) google_cat => '服装> 手套'

其中 google_cat 看起来与数组的其余部分完全不同。因此,任何输入都会受到赞赏。 谢谢

【问题讨论】:

    标签: php mysql arrays append


    【解决方案1】:

    不同之处在于,您的初始$row 使用mysql_fetch_array() 填充,默认使用MYSQL_BOTH 获取方法。

    这将使用数字索引和列名键创建一个数组。

    当您附加 'google_cat' 键时,您只是在创建关联索引。

    除非您真的要使用数字索引,否则我建议您坚持使用 mysql_fetch_assoc() 而不是 mysql_fetch_array()

    实际上,我真正建议的是完全放弃 mysql 扩展并转移到 PDO

    【讨论】:

    • Re: PDO -- web135.srv3.sysproserver.de/blog/index.php?/archives/… :D(只是说建议用户放弃他们当前的方法而不解释为什么不是最具教育意义的回应......)
    • 但是由于mysql_fetch_assoc(); +1,这是有道理的。
    • @aendrew 我已经放弃解释原因了,太累了。我认为通过手册的 PDO 部分可以清楚地解释好处
    • 如果告诉人们从函数式编程风格转变为面向对象的风格是你经常做的事情,为什么不在某处找到或写一篇关于该主题的博客文章,这样你就可以同时进行教育和不那么神秘?只是一个建议,不想批评。 (比如,如果我知道一个好的链接,我会自己链接到它......)
    • @aendrew 我很惊讶 mysql 扩展在 2011 年仍然如此流行。任何人都会认为新的 PHP 开发人员实际上并没有阅读手册......哦等等 :(。另外,只是因为PDO 是 OO,并不意味着你必须突然将整个应用程序转换为面向对象。这是我在主题forums.whirlpool.net.au/forum-replies.cfm?t=1234522 上写的一些内容
    【解决方案2】:

    我认为您的 MySQL 语法有误。试试:

    $gle = mysql_query("SELECT value FROM `extra_field_values` WHERE productid = '". $p ."' AND fieldid = '11';");
    

    您也可以尝试将$row['google_cat'] = $goog[0]; 替换为:

    $row['google_cat'] = $goog[0][0]; 
    

    ...所以它为您提供了多维行返回数组中第一个数组的内部数组。 (数组数组arraaaayyyyyy...)

    【讨论】:

    • 谢谢,这只是在这里转换代码时的一个错字。我的资源和我的行是我所期望的。他们很好。我的问题是我似乎可以从另一个查询中附加更多数据并使最终数组看起来像原始转储,但它仍然可以正常工作。
    【解决方案3】:

    首先使用相同的方法从 mysql(mysql_fetch_array 或 mysql_fetch_row)获取数组,而不是两者。

    那么你可以使用

    array_merge($row, $goog);
    

    将数组连接在一起。请注意警告,如果两个元素具有相同的关联键,则列表中的最后一个将是该键的值。

    http://php.net/array_merge

    【讨论】:

      【解决方案4】:

      你的语法错误!

      $gle = mysql_query("SELECT value FROM `extra_field_values` WHERE productid = $p' AND fieldid ='11' ");
      

      缺少一个撇号...

      应该是:

      $gle = mysql_query("SELECT value FROM `extra_field_values` WHERE productid = '$p' AND fieldid ='11' ");
      

      【讨论】:

      • 谢谢,这只是堆栈溢出的错字。它在代码库中没有丢失
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      • 2020-04-13
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      相关资源
      最近更新 更多