2014-09-22 2 views
0

Я изучаю PHP через обучающие видеоролики New Boston Youtube.Как решить эту неопределенную ошибку индекса при использовании PHP для запроса моей базы данных MySQL?

Когда я запускаю запрос в скрипте PHP (сценарий ниже сообщения об ошибке) на моем localhost, я получаю сообщение об ошибке, которое повторяется дважды. Сообщение об ошибке см. Ниже.

Я хочу иметь возможность запускать этот запрос в PHP-скрипте и возвращать запрошенную информацию.

Сообщение об ошибке при запуске index.php:

Примечание: Undefined индекс: калории в /Applications/XAMPP/xamppfiles/htdocs/Database_To_Server/index.php на линии 10

Уведомление : Undefined индекс: калории в /Applications/XAMPP/xamppfiles/htdocs/Database_To_Server/index.php на линии 10

Код:

index.php

<?php 
require 'connect.inc.php'; 

$query = "SELECT 'food' 'calories' FROM `food` ORDER BY 'id'"; 

if ($query_run = mysql_query($query)) { 

    while ($query_row = mysql_fetch_assoc($query_run)) { 
     $food = $query_row['food']; 
     $calories = $query_row['calories']; 
    } 

} else { 
    echo mysql_error(); 
} 

?> 

connect.inc.php

<?php 
$conn_error = "Could not connect."; 

$mysql_host = 'localhost'; 
$mysql_user = 'root'; 
$mysql_pass = ''; 

$mysql_db = 'a_database'; 

if ([email protected]_connect($mysql_host, $mysql_user, $mysql_pass) || [email protected]_select_db($mysql_db)) { 
    die($conn_error); 
} 
?> 
+2

Вы не видите запятую и скобки в этой строке «SELECT» food '' calories 'FROM 'food' ORDER BY' id '"; "также настоятельно рекомендуется обернуть имена таблиц и имена столбцов в обратных тиках – Edward

+1

. должен использовать 'mysqli_ *' функции вместо 'mysql_ *' –

+0

Кстати, помимо ответов, этот пример кода не заставит вас очень далеко, поскольку вы переписываете свои переменные внутри цикла. – jeroen

ответ

17

Вы используете неправильный identifiers для (и недостающую запятую имена столбцов)

$query = "SELECT 'food' 'calories' FROM `food` ORDER BY 'id'"; 

делать/и удалите ' примерно id

$query = "SELECT `food`, `calories` FROM `food` ORDER BY id"; 
  • IFfood не является частью ваших колонок (который, кажется, название вашей таблицы)

сделать

$query = "SELECT `calories` FROM `food` ORDER BY id"; 
  • просто проницательность.

Сноски:

Ваш нынешний код открыт для SQL injection.
Использовать prepared statements, или PDO with prepared statements.


Редактировать

Чтобы исправить настоящий запрос, сделайте следующее:

require 'connect.inc.php'; 

$query = "SELECT `food`, `calories` FROM `food` ORDER BY `id`"; 

$result = mysql_query($query) or die(mysql_error()); 

while($query_row = mysql_fetch_assoc($result)){ 
    echo $query_row['food']. " - ". $query_row['calories']; 
    echo "<br />"; 
} 

В кривой обучения, вы должны использовать mysql_error() в свою пользу, а не просто показывать Could not connect., должна быть проблема с подключением к БД, поэтому wi Я не покажу вам, что такое настоящая ошибка.

Например:

<?php 
mysql_connect("localhost", "root", "") or die(mysql_error()); 
echo "Connected to MySQL<br />"; 
mysql_select_db("a_database") or die(mysql_error()); 
echo "Connected to Database"; 
?> 

или the manual - mysql_error()

<?php 
$link = mysql_connect("localhost", "mysql_user", "mysql_password"); 

mysql_select_db("nonexistentdb", $link); 
echo mysql_errno($link) . ": " . mysql_error($link). "\n"; 

mysql_select_db("kossu", $link); 
mysql_query("SELECT * FROM nonexistenttable", $link); 
echo mysql_errno($link) . ": " . mysql_error($link) . "\n"; 
?> 

Приведенный выше пример будет что-то подобное:

1049: Неизвестный базы данных «Nonexistentdb»
1146: Таблица «kossu.nonexistenttable» не существует

+0

Ваша проницательность, возможно, неправильна, поскольку ОП используется для запроса пищи в его петле. –

+1

@ RaphaelMüller Я должен думать о любых возможностях. Следовательно, * if *. –

+0

Спасибо. Еда на самом деле одна из столбцов, но я начинаю думать, что переименование ее на нечто отличное от имени таблицы может быть более логичным. Ваш ответ исправил мою проблему. Большое спасибо! –

-2

решение является Исеть() для проверки, если массив имеет элемент запрашивали. Также у вас был недостаток в вашем SQL. Поля, которые вы пытаетесь выбрать, ДОЛЖНЫ быть разделены запятой.

Пример:

<?php 
require 'connect.inc.php'; 

$query = "SELECT food, calories FROM `food` ORDER BY 'id'"; 

if ($query_run = mysql_query($query)) { 

    while ($query_row = mysql_fetch_assoc($query_run)) { 
     $food = isset($query_row['food'])?$query_row['food']:''; 
     $calories = isset($query_row['calories'])?$query_row['calories']:''; 
    } 

} else { 
    echo mysql_error(); 
} 

?> 
+0

Спасибо. Я посмотрел на использование isset(), но я знаю, что у меня есть данные, поступающие из моей базы данных, поэтому не было необходимости проверять, были ли установлены переменные. Но, возможно, у меня нет полного понимания функции isset(). В любом случае, благодарю вас за отзыв –

+0

Всегда проверять, присутствует ли значение перед его использованием. Поскольку что-то может произойти с подключением к базе данных или может измениться структура базы данных. –

+0

Большое вам спасибо. Это имеет смысл. –

1

Change 'на `для столбца и имя таблицы, и лучшего использования mysqli_query после mysql_query является deprecated

Вы еда и переменная калории будут перезаписаны при каждой итерации цикла

<?php 
require 'connect.inc.php'; 

$query = "SELECT `food` `calories` FROM `food` ORDER BY 'id'"; 

if ($query_run = mysqli_query($query)) { 

    while ($query_row = mysqli_fetch_assoc($query_run)) { 
     $food[] = $query_row['food']; // Food and calories variable transmored into an array 
     $calories[] = $query_row['calories']; 
    } 

} else { 
    echo mysqli_error(); 
} 

?> 

connect.inc.php

<?php 
$conn_error = "Could not connect."; 

$mysql_host = 'localhost'; 
$mysql_user = 'root'; 
$mysql_pass = ''; 

$mysql_db = 'a_database'; 

if ([email protected]_connect($mysql_host, $mysql_user, $mysql_pass) || [email protected]_select_db($mysql_db)) { 
    die($conn_error); 
} 
?> 
0

Ну, для начала вам не хватает комы между таблицами, которые вы выбираете в своем запросе, тогда вы используете устаревший класс (вскоре исчезнуть). Если вы учитесь, вы должны проверить Dcoumentation mysql_query, вы должны попробовать вместо этого mysqli.

Тогда вы должны привыкнуть использовать grave для таблиц или имен полей и Normal apostrophe для струнного/VARCHAR или текстов на вставки/обновлении /, где и т.д.

Надеется, что это помогает.

0

Я, случается, следую тому же учебнику, что и вы. Мне потребовалось немного, чтобы понять это, но, посмотрев на его пример и сравнив некоторые ответы отсюда, я смог различить, что при выполнении запроса вам нужно использовать «` »вместо одиночных кавычек.

(неверный ответ) $ query = "SELECT 'food', 'calories' FROM 'food' ORDER BY 'id'";

(правильный ответ)
$ запрос = "SELECT food, calories ОТ food ORDER BY id";