我在为我妹妹写一个非常简单的座位安排。它只是一个数据库,其中有一个出席会议的人员名单,每个人都分配了一个表号($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中给出布尔值
表的结构是:

发布于 2013-05-30 17:00:03
在第一个查询中,您忽略了值周围的引号:
$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查询,或者至少过滤传入的数据。
https://stackoverflow.com/questions/16841798
复制相似问题