PHP脚本不会查询数据库

时间:2011-02-23 17:40:15

标签: php mysql

我有一个小的PHP脚本,它只是连接到数据库并将某个表转储到屏幕上。

// Replaced with expanded snippet below

此代码抛出错误,指出$menu为NULL。但是一个相同的脚本

// Also replaced with expanded snippet below

执行正常 - 它们包含相同的文件以获得具有相同连接特征的$menumysql_connectmysql_select_db函数都被称为func() or die(mysql_error()),我没有收到任何错误。知道原因是什么吗?

这是我的连接代码:

<?php
# FileName="Connection_php_mysql.htm"
# Type="MYSQL"
# HTTP="true"
$hostname_menu = "";
$database_menu = "";
$username_menu = "";
$password_menu = "";
$menu = mysql_connect($hostname_menu, $username_menu, $password_menu) or die(mysql_error());
$menu_db = mysql_select_db($database_menu, $menu) or die(mysql_error());
?>

我编辑了变量。我已经检查过,没有文件阴影或使用$ menu用于其他目的。

这是索引页面。我没有写这个,只是你知道。

<?PHP
session_start();
if($_SESSION['login'] != "true"){
    header("Location: login.php");  
}else{}
?>
<?PHp include("includes/top.php"); ?>
<?PHP include("includes/menu.php"); ?>
<div id="main_page">
    <div id="page2">    
        <?PHP
            if($_REQUEST['page'] == ""){
                include("pages/index.php");         
            }else{          
                include("pages/".$_REQUEST['page'].".php");
            }           
        ?>      
    </div>    
</div>       
<?PHP include("includes/bottom.php"); ?>

其他PHP包含的实际上是纯HTML,并没有定义任何其他变量。上面的第一个代码段扩展为

<!-- semester1.php -->
<?php
include('includes/db.php');
function spew_bookings() {

    $roomquery = "SELECT * FROM php_bookingtable";
    $result = mysql_query($roomquery, $menu);
    while($row = mysql_fetch_assoc($result)) {
        foreach($row as $key => $value) {
            echo $key; echo '<br>'; echo $value;
        }
    }
}
function spew_user_bookings(){

}
if ($_SESSION['deptid'] == 'Central Administrator') {
    spew_bookings();
} else {
    spew_user_bookings();
}
?>

并包含在上面的index.php中。另一个文件被重定向,不包括在内,如下所示:

<?PHP    
    session_start();        
    include("../includes/db.php");      
    $loginQuery = "SELECT * FROM php_usertable WHERE username = '".$_REQUEST['username']."'";
    $loginResult = mysql_query($loginQuery, $menu);
    $loginRow = mysql_fetch_array($loginResult);
    $password = $_REQUEST['password'];      
    //-- get their department from their department id --//
    $deptQuery = "SELECT * FROM php_departmenttable WHERE deptid = '".$loginRow[3]."'";
    $deptResult = mysql_query($deptQuery, $menu);
    $deptRow = mysql_fetch_array($deptResult);

    if(md5($password) == $loginRow[2]){

        //-- set all the users information into sessions --//
        $_SESSION['username'] = $loginRow[1];       //-- from usertable --//
        $_SESSION['deptid'] = $deptRow[1];          //-- from depttable --//
        $_SESSION['extension'] = $loginRow[4];
        $_SESSION['email'] = $loginRow[5];

        $_SESSION['login'] = "true";
        header("Location: ../index.php");           
    }else{      
        header("Location: ../login.php");           
    }           
?>

我知道这里有安全漏洞,但现在它们并不是一个问题。

2 个答案:

答案 0 :(得分:1)

你的函数spew_bookings()中的

你引用了未定义的$menu。在这种情况下,您将获得由php抛出的一行中的两个错误:

  1. 警告$menu未定义
  2. $menu来电
  3. 中表明mysql_query为空的错误

    也许您在功能开始时需要global $menu

答案 1 :(得分:0)

要做的第一件事是注意错误信息。 IT会告诉您$menunull的哪一行和哪个文件。找到那条线......然后查看以相反顺序发生的一切。

正如其他人在他们的评论中所说的那样,你的connect和select_db函数的结果不能产生空值......并且已经定义了变量(否则它会因为它是未定义的而不是null)所以在堆栈的某个地方调用并包括somethign会使该变量归零。