2013-03-30 3 views
1

Возможно, я уже давно привык использовать методы ORM для извлечения данных из БД, но теперь я разрабатываю простой небольшой проект для моего приятеля, которому не нужен все лишний guff из MVC, ORM и т. д. С этим ниже приведен пример запроса, который я собираю в классе, который я создаю в PHP.mysql неожиданный вывод из запроса

$this->sqlstart(); 
$sql = "select label, setting from ".$this->_settings." where id <= 4"; 
$query = mysql_query($sql); 

$result = array(); 
while($row = mysql_fetch_array($query)) 
{ 
    $result[] = $row; 
} 
return $result; 

Выход из return $result является:

Array 
(
    [0] => Array 
     (
      [0] => Week 1 Pay 
      [label] => Week 1 Pay 
      [1] => 2995 
      [setting] => 2995 
     ) 

    [1] => Array 
     (
      [0] => Week 2 Pay 
      [label] => Week 2 Pay 
      [1] => 2995 
      [setting] => 2995 
     ) 

    [2] => Array 
     (
      [0] => Week 1 Dates 
      [label] => Week 1 Dates 
      [1] => 1-15 
      [setting] => 1-15 
     ) 

    [3] => Array 
     (
      [0] => Week 2 Dates 
      [label] => Week 2 Dates 
      [1] => 16-31 
      [setting] => 16-31 
     ) 

) 

И это должно быть

Array 
(
    [0] => Array 
     (
      [label] => Week 1 Pay 
      [setting] => 2995 
     ) 

    [1] => Array 
     (
      [label] => Week 2 Pay 
      [setting] => 2995 
     ) 

    [2] => Array 
     (
      [label] => Week 1 Dates 
      [setting] => 1-15 
     ) 

    [3] => Array 
     (
      [label] => Week 2 Dates 
      [setting] => 16-31 
     ) 

) 

кто может указать мне, где дополнительные данные в наборах приходят?

+0

Проверьте руководство для 'mysql_fetch_array()'. http://php.net/manual/en/function.mysql-fetch-array.php –

+0

@MichaelBerkowski Я думаю, что вы правы. Я должен был искать немного сложнее. Я бы наверняка наткнулся на ответ – chris

+0

PS, это звучит как БОЛЬШАЯ возможность привыкнуть к использованию mysqli или PDO apis вместо обследуемого mysql! –

ответ

2

От http://php.net/manual/en/function.mysql-fetch-array.php

array mysql_fetch_array (resource $result [, int $result_type = MYSQL_BOTH ]) 

Либо пройти MYSQL_ASSOC как вторые пары, чтобы просто получить ассоциативный массив обратно, или просто позвонить mysql_fetch_assoc().

+0

Да, я думаю, что можно с уверенностью сказать, что я очень часто использую методы ORM сейчас, не могу поверить, что я так много забыл, перейдя к прямым методам mySQL, которые может предложить php. Угадайте, что это послужит хорошим обновленным проектом. Спасибо :-) – chris

2

Вы должны быть в состоянии передать в качестве второго аргумента, который будет выводить только ассоциативные имена столбцов:

while($row = mysql_fetch_array($query, MYSQL_ASSOC)) 
+0

или используйте метод mysql_fetch_assoc (...). –

5

Вы должны использовать mysql_fetch_assoc, чтобы получить результат правильно. Он предоставит вам ассоциативный массив вместо обычного.

0

mysql_fetch_array возвращает два пути доступа к значениям: имя поля и номер индекса. Вы можете изменить mysql_fetch_array к mysql_fetch_assoc или изменить код:

while($row = mysql_fetch_array($query)){ 
    $result[] = array('label' => $row['label'], 'setting' => $row['setting']; 
} 
Смежные вопросы