PHP SQL... запрос в массиве

У меня есть класс и внутри этого класса есть эта функция, в которой есть оператор select

class homeclass {

 function viewHome(){
 $connection = mysql_connect("localhost","will","Idontknow!1");
 if (!$connection){
 die('Could not connect: ' . mysql_error());
 }

 $db = mysql_select_db("willr", $connection);

 $query = "select id, text, image from home";
 $results = mysql_query($query, $connection);
 $results = mysql_fetch_array($results);

 return $results;

 $close = mysql_close($connection);
 }

}

Я вызываю эту функцию в другом файле, который находится внутри футляра... так

case"updatehome":
 $homeArray = $home->viewHome();
 print_r($homeArray);
 break;

Когда я делаю выражение print_r, я получаю это обратно...

Array ( [0] => 1 [id] => 1 [1] => Test Header [text] => Test Header [2] => test.jpg [image] => test.jpg )

Мой вопрос, почему я получаю eveything дважды? Я не понимаю

3 ответа

Это потому, что вы используете mysql_fetch_array, используйте mysql_fetch_assoc, который вместо этого возвращает только ассоциативный массив, или передайте MYSQL_ASSOC в качестве второго аргумента mysql_fetch_array


Вы получаете все дважды, потому что mysql_fetch_array возвращает значения как в 0-индексированном формате (числовые индексы), так и в ассоциативном формате. Если вы хотите только один, либо перейдите во второй параметр, либо используйте одну из других функций.

НО прежде чем идти дальше, несколько советов:

  • Элемент списка
  • исследовать функции PDO в MySQL. Они помогут вам написать лучший и безопасный код.
  • пожалуйста, не отправляйте пароли и другую конфиденциальную информацию в SO.
  • вы можете захотеть ознакомиться с дизайном OO или даже изучить одну из многих фреймворков PHP. Даже если вы не используете один (и иногда есть причины, по которым это не так), попытка одного или двух может стать хорошим способом начать знакомство с общими шаблонами проектирования OO. Zend Framework, Symfony2 и CodeIgniter являются 3 из самых популярных (но далеко не единственными: введите ссылку здесь)


Этот класс демонстрирует плохое знание кода. return завершает функциональный блок, поэтому mysql_close($connection); никогда не запускается. Не говоря уже о накладных расходах на открытие соединения для каждого запроса... Просто откройте соединение один раз в начале вашего кода, и все вызовы mysql_query оттуда предполагают это соединение. Кроме того, вы определяете переменные, которые никогда не используются ($db, $close).

В любом случае mysql_fetch_array возвращает массив, содержащий как числовые ключи (например, в mysql_fetch_rows), так и ассоциативные ключи (например, в mysql_fetch_assoc). В идеале вы должны использовать _rows или _assoc зависимости от того, что проще для ситуации. Здесь, вероятно, _assoc что вам нужно.

licensed under cc by-sa 3.0 with attribution.