1

谁能看到我在这里做错了什么?我试图根据数据库中字段的值包含某个页面。

我有 2 张桌子要检查,

如果用户名出现在 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');}
    }
    }
4

2 回答 2

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...
于 2012-08-09T12:27:51.627 回答
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 开始支持)。如果您不确定要使用哪一个,请阅读这篇 SO 文章

编辑如果您不确定问题出在哪里,您可以随时echo查询以确保您将您认为传递给数据库的内容传递给数据库(通常,当查询不起作用时,要么是这个,或者你的逻辑不好)。

于 2012-08-09T12:30:00.020 回答