我正在给我姐姐写一个非常简单的座位安排。它只是一个数据库,其中包含一个人员列表,每个人都有一个分配的表号($tano
)
我的PHP如下:
$con = mysql_connect('localhost', $dbuser, $dbpass) or die(mysql_error());
$db = mysql_select_db($dbname, $con) or die(mysql_error());
// Get current table no
$tableno = $_GET["t"];
// Current table -> array
$t = array();
$i = 0;
$result = mysql_query('SELECT * FROM plan WHERE tano = $tableno ORDER BY fname');
while($row = mysql_fetch_array($result)) {
$t[$i] = $row;
$i++;
}
// Get other tables (Seats Remaining)
for ($i = 1; $i <= 40; $i++) {
$result = mysql_query("SELECT * FROM plan WHERE 'tano' = $i");
$seatsremaining = 10-mysql_num_rows($result);
if ($seatsremaining == 0) {$d[$i] = "Table ".$i." (No Seats Remaining)";}
else if ($seatsremaining == 1) {$d[$i] = "Table ".$i." (1 Seat Remaining)";}
else if ($seatsremaining >= 2) {$d[$i] = "Table ".$i." (".$seatsremaining." Seats Remaining)";}
}
?>
您可以在www.greenbottleblue.com上看到其余的HTML代码
未填充数组,并且出现恼人的SQL错误:
警告:mysql_fetch_array()要求参数1为资源,布尔值在第18行的/home/greenbot/public_html/index.php中给出
表结构是:
答案 0 :(得分:1)
在您的第一个查询中,您缺少值的引号:
$result = mysql_query('SELECT * FROM plan WHERE tano = $tableno ORDER BY fname');
这应该是:
$result = mysql_query("SELECT * FROM plan WHERE tano = '$tableno' ORDER BY fname");
在第二个查询中,您使用引号而不是列名称周围的反引号:
$result = mysql_query("SELECT * FROM plan WHERE 'tano' = $i");
这应该是:
$result = mysql_query("SELECT * FROM plan WHERE `tano` = $i");
您应该注意,您的代码假定查询已成功完成而不是检查。出于调试目的,您可以添加:
... or die(mysql_error());
到每个mysql_query(...)
语句的末尾,以获取有关尝试查询的详细信息。您应该为生产代码中的此类错误开发日志记录策略。
此外,请注意使用未经过滤的用户输入$tableno = $_GET["t"];
为SQL注入攻击打开了大门。考虑更新代码以使用参数化PDO查询,或者至少过滤传入的数据。