Неопределенный индекс ТОЛЬКО при использовании массива - PullRequest
0 голосов
/ 05 ноября 2011

Я хочу иметь функцию SelectAll, которая принимает несколько аргументов (класс, таблица, поле сортировки и порядок сортировки.) Комментарии объясняют, что происходит (или что предполагается.)

  public static function SelectAll($class, $table, $sort_field, $sort_order = "ASC")
  {

    /* First, the function performs a MySQL query using the provided arguments. */

    $query = "SELECT * FROM " .$table. " ORDER BY " .$sort_field. " " .$sort_order;
    $result = mysql_query($query);

    /* Next, the function dynamically gathers the appropriate number and names of properties. */

    $num_fields = mysql_num_fields($result);
    for($i=0; $i < ($num_fields); $i++)
    {
      $fetch = mysql_fetch_field($result, $i);
      $properties[$i] = "'".$fetch->name."'";
    }
    /*echo [$properties[0]; echo "<br />";}*/
    /* Finally, the function produces and returns an array of constructed objects. */

    while($row = mysql_fetch_assoc($result))
    { 
      for($i=0; $i < ($num_fields); $i++)
      {
        $args[$i] = $row[$properties[$i]];
      }
      $array[] = call_user_func_array(new $class, $args);
    } return $array; }

Теперь у меня проблема в том, что $row[$properties[$i]] приводит к «неопределенному индексу».

Сразу после того, как функция соберет количество / имена полей и сохранит их в массиве, я могу отобразить значение $properties[0], и оно показывает, как должно, 'id', но $row[~anything here~]просто не работает, если я не введу значение вручную, например $row['id'].Как вы можете себе представить, очень расстраивает и сбивает с толку.

Почему это не сработает?Есть ли какие-либо решения или альтернативные способы выполнения этой функции?

1 Ответ

0 голосов
/ 05 ноября 2011

Как я вижу, ваши $properties[$i] элементы массива имеют в кавычках значения, такие как "'id'", так что $row[$properties[$i]] <==> $row["'id'"]! = $row["id"];

И вы можете проверить $result === false после $result = mysql_query($query);

В любом случае, я думаю, вы могли бы заменить свою функцию на эту (если вы создали ее только для демонстрации):

public static function SelectAll($class, $method_name, $table, $sort_field, $sort_order = "ASC"){
  /* First, the function performs a MySQL query using the provided arguments. */
  $query = "SELECT * FROM " .$table. " ORDER BY " .$sort_field. " " .$sort_order;
  $result = mysql_query($query);

  while($row = mysql_fetch_array($result))
    $array[] = call_user_func_array(array($class,'__construct'), $row);

  return $array;
}
...