我正在通过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);
}
?>
答案 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 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.
,因此不会向您展示真正的错误是。
例如:
<?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_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 (!@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 food
,calories
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();
}
?>