我的fetch数组不起作用

时间:2012-11-28 19:37:41

标签: php mysql arrays

我正在尝试拉一个数组用于另一个查询,但它不起作用,因为最后一个逗号。

    <?php
    include"connection.php";
    $pos = mysqli_query($not,"SELECT * FROM equipos");
    $logos = array();
    while($row= mysqli_fetch_assoc($pos)){
    $logos[] = "<br>'".$row['abrv']."'=>"."'".$row['logo']."'";
    }
    $logos = implode(",", $logos);

    $enjuego = mysqli_query($not,"SELECT * FROM partidos WHERE dprt='ftbls'");
    while($part=mysqli_fetch_array($enjuego)){
    $liga=$part['serie'];
    $eq1= $part['eq1'];
    $eq1s= strtoupper($eq1);
    $eq2= $part['eq2'];
    $eq2s= strtoupper($eq2);

    echo $logos[$eq1].'<br>';
    }
    ?>

它一遍又一遍给我同样的错误。 这是我最接近的但是没有用。 有人能告诉我我做错了什么吗?

我得到的错误是:警告:第22行中的非法字符串偏移'gua'

4 个答案:

答案 0 :(得分:2)

您的代码有几个问题:

  • 您从未创建过数组
  • 您不断覆盖$logos
  • 您对substr_replace()的使用表明存在更深层次的问题。

这是一个更好的方法:

  1. 构建数组。

    $logos = array();
    while($row= mysqli_fetch_assoc($pos)){
      $logos[] = "<br>'".$row['abrv']."'=>"."'".$row['logo']."'";
    }
    
  2. 有很多方法可以将数组压缩成字符串。我建议您浏览PHP Array Functions上的手册。在您的情况下,您对implode()

    感兴趣
    $logos = implode(",", $logos);
    
  3. 注意: $logos气味的值。您应该构造数组来保存数据,而不是格式化。

    例如:

    $logos[$row['abrv']] = $row['logo'];
    

    输出:

    print_r($logos);
    

答案 1 :(得分:1)

你想要的东西可以通过多种方式实现,但让我们来看看你的代码,那里有很多不妥之处。

  • 语义无意义的变量名称,如posnotequiposabrv。只有logoresult是好的变量名称。

  • 在数据库查询中使用*选择器。不要那样做,而是选择你需要的确切字段,它更好的性能,可维护性,代码可读性,可测试性......还需要我说更多吗?

  • 每行获取并在每行上运行代码,而实际需要的是包含所有行的数组。解决方案:

    $result = mysqli_query($not, "SELECT * FROM equipos");
    $logos = mysqli_fetch_all($result, MYSQLI_ASSOC);
    
  • 使用字符串连接子数组,这不是它的工作方式,你可以做什么:

    while($row = mysqli_fetch_assoc($result))
    {
        $logos[][$row['abrv']] = $row['logo'];
    }
    

    但正如我所说,这不是必要的。

  • 每次循环迭代时覆盖变量$logos。您需要执行$logos[] = ...

答案 2 :(得分:0)

通常,implode对此类情况很有用。

在不知道您想要做什么的情况下,请将此作为第一个提示:

$logos = array();

while($row= mysqli_fetch_assoc($pos)){
    $logos[] = "<br>'".$row['abrv']."'=>"."'".$row['logo']."'";
}

$logos = implode(",", $logos);

答案 3 :(得分:0)

我想到的最简单的方法就是更改查询并将数组提取到 -

<?php
  include_once("connection.php");
  $result = mysqli_query($not,"SELECT abrv, logo FROM equipos");
  $rows = mysqli_fetch_array($result, MYSQLI_ASSOC);

  // display the result
  echo "<pre>"
  print_r($rows);
  echo "</pre>"
?>