有谁能看到我在这里做错了什么? 我试图根据数据库中字段的值包含某个页面。
我有两张表要检查,
如果用户名出现在table.1中,而field.units = days inlcude days.php
如果用户名出现在table.1中,则field.units = hours inlcude hours.php
如果用户名出现在table.2中,而field.units = days inlcude days.php
如果用户名出现在table.2中,则field.units = hours inlcude hours.php
$username = $USER->firstname.' '.$USER->lastname;
echo $username;
$is_academic_result = mysql_query('SELECT * from holiday_entitlement_academic where employee = '.$username.'');
$is_business_result = mysql_query('SELECT * from holiday_entitlement_business_manual where employee = '.$username.'');
if(mysql_num_rows($is_academic_result) > 0){
while($is_academic = mysql_fetch_array($is_academic_result)) {
if ($is_academic['units'] == 'days'){include('days.php');}
else if ($is_academic['units'] == 'hours'){include('hours.php');}
}
}
else if(mysql_num_rows($is_business_result) > 0){
while($is_business = mysql_fetch_array($is_business_result)) {
if ($is_business['units'] == 'days'){include('days.php');}
else if ($is_business['units'] == 'hours'){include('hours.php');}
}
}
答案 0 :(得分:1)
如果您的用户名确实包含
(这似乎是一个糟糕的设计),那么您在查询中的$username
周围会丢失引号。正如你现在所做的那样,有一些语法问题,你在最后留下一个单引号,而不是引用$username
。
// Use double quotes on the string, and single around $username
$is_academic_result = mysql_query("SELECT * from holiday_entitlement_academic where employee = '$username'");
// Same thing...
$is_business_result = mysql_query("SELECT * from holiday_entitlement_business_manual where employee = '$username'");
如果您对结果资源进行了一些错误检查,则会显示这些问题:
if (!$is_academic_result) {
// Query problem
echo mysql_error();
}
// Same for the other query...
答案 1 :(得分:1)
首先,您不需要在while
循环中执行任何这些操作,因为只返回一个或零结果(您正在检查主键,对吧?)。
其次,您的查询设置不正确 - 您使用单引号但从不转义它们。
因此,考虑到这一点,我们会做以下事情:
$is_academic_result = mysql_query('SELECT * from holiday_entitlement_academic where employee = \'' . $username . '\'');
$is_business_result = mysql_query('SELECT * from holiday_entitlement_business_manual where employee = \'' . $username . '\'');
if($is_academic = mysql_fetch_array($is_academic_result)) {
switch($is_academic['units']) {
case 'days':
include_once('days.php');
break;
case 'hours':
include_once('hours.php');
break;
default:
break;
}
} else if ($is_business = mysql_fetch_array($is_business_result)) {
switch($is_business['units']) {
case 'days':
include_once('days.php');
break;
case 'hours':
include_once('hours.php');
break;
default:
break;
}
}
请注意您应该停止使用mysql_*
功能。他们被弃用了。而是使用PDO(从PHP 5.1开始支持)或mysqli(从PHP 4.1开始支持)。如果您不确定使用哪一个,read this SO article。
编辑如果您不确定问题出在哪里,您可以随时echo
查询,以确保您传递的是您认为传递给数据库的内容(更多内容)通常情况下,当查询不起作用时,它就是这个,或者你的逻辑是坏的。)