使用PHP查询MySQL数据库时,如何解决此未定义的索引错误?

时间:2014-09-22 16:51:53

标签: php mysql sql database

我正在通过New Boston Youtube视频教程学习PHP。

当我在我的localhost上运行PHP脚本中的查询(脚本在错误消息下面)时,我收到一条重复两次的错误消息。请错误消息见下文。

我希望能够在PHP脚本中运行此查询并返回我查询的信息。

运行index.php时出现错误消息

  

注意:未定义的索引:第10行/Applications/XAMPP/xamppfiles/htdocs/Database_To_Server/index.php中的卡路里

     

注意:未定义的索引:第10行/Applications/XAMPP/xamppfiles/htdocs/Database_To_Server/index.php中的卡路里

代码

的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 (!@mysql_connect($mysql_host, $mysql_user, $mysql_pass) || !@mysql_select_db($mysql_db)) {
    die($conn_error);
} 
?>

5 个答案:

答案 0 :(得分:17)

您使用了错误的identifiers(以及列名之间缺少逗号)

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

执行/并从约'

中删除id
$query = "SELECT `food`, `calories` FROM `food` ORDER BY id";
  • 如果 food不是您的列的一部分(这似乎是您的表的名称)

DO

$query = "SELECT `calories` FROM `food` ORDER BY id";
  • 只是一个见解。

<强> 脚注:

您现有的代码向SQL injection开放 使用prepared statementsPDO 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.,因此不会向您展示真正的错误是。

例如:

<?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:未知数据库&n'adxistentdb&#39;
  1146:表&#39; kossu.nonexistenttable&#39;不存在

答案 1 :(得分:1)

改变&#39; to'for column and table name,并且更好地使用mysqli_query,因为mysql_querydeprecated

在每次循环迭代中,您的食物和卡路里变量都会被覆盖

<?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 (!@mysqli_connect($mysql_host, $mysql_user, $mysql_pass) || !@mysqli_select_db($mysql_db)) {
    die($conn_error);
} 
?>

答案 2 :(得分:0)

好吧,首先,您在查询中选择的表之间缺少昏迷,然后,您正在使用已弃用的类(很快就会消失)。 如果你正在学习,你应该检查mysql_query的Dcoumentation,你应该尝试mysqli

然后你应该习惯使用grave表格或字段名称,Normal apostrophe表示字符串/ VARCHAR或文本插入/更新/等等。

希望这有帮助。

答案 3 :(得分:0)

我碰巧跟你做了同样的教程。我花了一些时间来弄清楚它,但在看了他的例子并比较了这里的一些答案之后,我能够辨别出在运行查询时你需要使用“`”而不是单引号。

(错误答案) $ query =“选择'食物','卡路里'来自'食物'订购'id'”;

(正确答案)
$ query =“SELECT foodcalories FROM food ORDER BY id”;

答案 4 :(得分:-2)

解决方案是isset(),用于检查数组是否具有请求的元素。 你的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();
}

?>