2013-07-10 6 views
0
<?php 
    $result = $mysqli->query(SELECT SUM(Answer) as answer FROM answers WHERE SID ='$uname'"); 
      $Sum = $result->fetch_row(); 
    var_dump($Sum); 
?> 

При выполнении приведенного выше кода я получаю следующее: Array ([SUM(Answer)] => 8), однако, когда я пытаюсь получить доступ к $Sum[0] я получаю следующее Undefined смещение: 0, и это ничего не печатает. Мне нужно использовать эту переменную в выражении echo. Кроме того, $ Sum ['Answer'] ничего не печатает, и я получил сообщение с указанием неопределенного индекса.Показаны значения массива?

+1

Умм вы можете рассказать нам нечто большее, чем просто дать нам код и угадать, что происходит? –

+4

* Обязательно: * Функции 'mysql_ *' будут [устарели в PHP 5.5] (http://php.net/manual/en/faq.databases.php#faq.databases.mysql.deprecated). Не рекомендуется писать новый код, поскольку он будет удален в будущем. Вместо этого либо [MySQLi] (http://php.net/manual/en/book.mysqli.php) или [PDO] (http://php.net/manual/en/book.pdo.php) и [стать лучшим разработчиком PHP] (http://jason.pureconcepts.net/2012/08/better- PHP-разработчик /). –

+1

В дополнение к использованию устаревшего метода mysql_query, не очевидно, что вы выполняете [надлежащее выполнение SQL-экранов] (http://bobby-tables.com/php), чтобы избежать серьезных [ошибок SQL-инъекций] (http: //bobby-tables.com/). – tadman

ответ

3

Если вы хотите напечатать значение массива или объекта и показать все его элементы/свойства, используйте функцию print_r.

print_r($Sum); 

или, для лучшего форматирования на веб-странице:

echo '<pre>' . print_r($Sum, true) . '</pre>'; 

После вашего Edit: var_dump правильно, вы должны получить доступ к колонке по его имени, как это:

$Sum['SUM(Answer)'] 

Если вам не нравится это, измените имя своего столбца (SELECT SUM(Answer) AS sum FROM... или что-то в этом роде, то вы можете сделать это $Sum['sum']).

+0

Используйте 'echo '

' . print_r($result, true) . '
';' для форматированного вывода. –

+0

@MarkusHofmann Я думаю, что я делал это редактирование одновременно с тем, что вы его комментировали. :) – qJake

+1

Похоже, мы были на одной волне. –

4

mysql_fetch_assoc возвращает ассоциативный массив, а не числовой массив, поэтому 0 будет неопределенным индексом. В отличие от других языков массивы PHP не имеют числовых индексов.

Если вы хотите использовать числовой индекс, вы должны использовать mysql_fetch_array для получения массива с ассоциативными и числовыми индексами. Если вам нужно придерживаться ассоциативного массива, однако, необходимо использовать соответствующий ключ:

$Sum['SUM(Answer)']; 

Ключ является необычным, потому что ваш SQL не дает SUM (ответ) имя, поэтому я рекомендую вам обновить его, чтобы иметь одно:

$SQL = "SELECT SUM(Answer) as answer FROM answers WHERE SID ='$uname' "; 
+0

Не извлекает ли ассоциативный ответ как целые числа, так и имена полей? –

+0

Нет, 'mysql_fetch_assoc' возвращает только ассоциативный массив: http://php.net/manual/en/function.mysql-fetch-assoc.php – nullability

+0

Я пробовал это, раньше не работал. Я должен был добавить это к моему вопросу. –

0

TIP: Всегда взглянуть на PHP Manual.

Расширение mysql_fetch_assoc() устарело от PHP 5.5.0, так как вместо него должны использоваться расширения MySQLi и PDO. Just to quote the manual & hellip;

Если вы хотите отлаживать использовать код:

echo '<pre>' . print_r($result, true) . '</pre>'; 

Это эхо массив/объект отформатирован, так что это будет проще для вас читать.

var_dump будет менее читаемым, так как он отображает типы (например, строку) и длину строки.

PHP Arrays Manual расскажет вам, как использовать массивы.

Счастливое чтение :-)

+0

Прошу прощения, вы немного опоздали на вечеринку, мы пропустили вывод отладки в этот момент. :) – qJake

+0

@spikex Был этот ответ в редакторе некоторое время, но отвлекся (я умер, чтобы пойти в туалет). –

+1

Спасибо за совет Маркус :) –

Смежные вопросы