2013-10-07 49 views
1

我试图将我的mysql更改为mysqli。当我这样做,我得到错误。我尝试了一切,但我找不到解决方案。警告:mysqli_num_rows()期望参数1为mysqli_result,null给出

,我有错误:(你所看到的是不是所有的错误)

警告:mysqli_query()预计参数1是mysqli的,在
C语言的零式给出:\ XAMPP \ htdocs中\遵循\包括\ database.php中上线219

警告:mysqli_num_rows()预计参数1被mysqli_result,在C空给出:\ XAMPP \ htdocs中\遵循\包括\ database.php中上线220

警告:mysqli_query()期望参数1是mysqli,null give n在C:\ xampp \ htdocs \ follow \ include \ database.php上线231

警告:mysqli_num_rows()期望参数1为mysqli_result,null中给出C:\ xampp \ htdocs \ follow \ include \ database在线路232 .PHP

警告:mysqli_query()预计参数1是mysqli的,在C空给出:\ XAMPP \ htdocs中\遵循\包括\ database.php中上线102

...更多的错误

,这是我的PHP代码

<?php 
/** 
* Please subscribe to our feeds at http://blog.geotitles.com for more such tutorials 
*/ 
include("constants.php"); 
class MySQLDB 
    { 
    var $connection;   //The MySQL database connection 
var $num_active_users; //Number of active users viewing site 
var $num_active_guests; //Number of active guests viewing site 
var $num_members;  //Number of signed-up users 
/* Note: call getNumMembers() to access $num_members! */ 

    /* Class constructor */ 
    function MySQLDB(){ 
    /* Make connection to database */ 

$con = mysqli_connect(DB_SERVER, DB_USER, DB_PASS,DB_NAME); 

    // Check connection 
if (mysqli_connect_errno()) 
    { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 



    /** 
    * Only query database to find out number of members 
    * when getNumMembers() is called for the first time, 
    * until then, default value set. 
    */ 
    $this->num_members = -1; 

    if(TRACK_VISITORS){ 
    /* Calculate number of users at site */ 
    $this->calcNumActiveUsers(); 

    /* Calculate number of guests at site */ 
    $this->calcNumActiveGuests(); 
    } 
    } 


    function confirmUserPass($username, $password){ 
    GLOBAL $con; 
    /* Add slashes if necessary (for query) */ 
    if(!get_magic_quotes_gpc()) { 
     $username = addslashes($username); 
    } 

    /* Verify that user is in database */ 
    $q = "SELECT password FROM ".TBL_USERS." WHERE username = '$username'"; 
    $result = mysqli_query($con,$q); 
    if(!$result || (mysqli_num_rows($result) < 1)){ 
    return 1; //Indicates username failure 
    } 

    /* Retrieve password from result, strip slashes */ 
    $dbarray = mysqli_fetch_array($result); 
    $dbarray['password'] = stripslashes($dbarray['password']); 
    $password = stripslashes($password); 

    /* Validate that password is correct */ 
    if($password == $dbarray['password']){ 
    return 0; //Success! Username and password confirmed 
    } 
    else{ 
    return 2; //Indicates password failure 
    } 
    } 


    function confirmUserID($username, $userid){ 
    GLOBAL $con; 
    /* Add slashes if necessary (for query) */ 
    if(!get_magic_quotes_gpc()) { 
     $username = addslashes($username); 
    } 

    /* Verify that user is in database */ 
    $q = "SELECT userid FROM ".TBL_USERS." WHERE username = '$username'"; 
    $result = mysqli_query($con,$q); 
    if(!$result || (mysqli_num_rows($result) < 1)){ 
    return 1; //Indicates username failure 
    } 

    /* Retrieve userid from result, strip slashes */ 
    $dbarray = mysqli_fetch_array($result); 
    $dbarray['userid'] = stripslashes($dbarray['userid']); 
    $userid = stripslashes($userid); 

    /* Validate that userid is correct */ 
    if($userid == $dbarray['userid']){ 
    return 0; //Success! Username and userid confirmed 
    } 
    else{ 
    return 2; //Indicates userid invalid 
    } 
    } 


    function usernameTaken($username){ 
    GLOBAL $con; 
    if(!get_magic_quotes_gpc()){ 
    $username = addslashes($username); 
    } 
    $q = "SELECT username FROM ".TBL_USERS." WHERE username = '$username'"; 
    $result = mysqli_query($con,$q); 
    return (mysqli_numrows($result) > 0); 
    } 


function usernameBanned($username){ 
GLOBAL $con; 
    if(!get_magic_quotes_gpc()){ 
    $username = addslashes($username); 
    } 
    $q = "SELECT username FROM ".TBL_BANNED_USERS." WHERE username = '$username'"; 
    $result = mysqli_query($con,$q); 
    return (mysqli_numrows($result) > 0); 
    } 

function addNewUser($username, $password, $email){ 
GLOBAL $con; 
    $time = time(); 
    /* If admin sign up, give admin user level */ 
    if(strcasecmp($username, ADMIN_NAME) == 0){ 
    $ulevel = ADMIN_LEVEL; 
    }else{ 
    $ulevel = USER_LEVEL; 
    } 
    $q = "INSERT INTO ".TBL_USERS." VALUES ('$username', '$password', '0', $ulevel,  '$email', $time)"; 
    return mysqli_query($con,$q); 
    } 


function updateUserField($username, $field, $value){ 
    $q = "UPDATE ".TBL_USERS." SET ".$field." = '$value' WHERE username = '$username'"; 
    return mysqli_query($con,$q); 
} 


    function getUserInfo($username){ 
GLOBAL $con; 
    $q = "SELECT * FROM ".TBL_USERS." WHERE username = '$username'"; 
    $result = mysqli_query($con,$q); 
    /* Error occurred, return given name by default */ 
    if(!$result || (mysqli_num_rows($result) < 1)){ 
    return NULL; 
    } 
    /* Return result array */ 
    $dbarray = mysqli_fetch_array($result); 
    return $dbarray; 
    } 


function getNumMembers(){ 
GLOBAL $con; 
    if($this->num_members < 0){ 
    $q = "SELECT * FROM ".TBL_USERS; 
    $result = mysqli_query($con,$q); 
    $this->num_members = mysqli_num_rows($result); 
    } 
    return $this->num_members; 
    } 

    /** 
    * calcNumActiveUsers - Finds out how many active users 
    * are viewing site and sets class variable accordingly. 
    */ 
    function calcNumActiveUsers(){ 
GLOBAL $con; 
    /* Calculate number of users at site */ 
    $result = mysqli_query($con,"SELECT * FROM ".TBL_ACTIVE_USERS); 
    $this->num_active_users = mysqli_num_rows($result); 
    } 


    function calcNumActiveGuests(){ 
    GLOBAL $con; 
    /* Calculate number of guests at site */ 
    $q = "SELECT * FROM ".TBL_ACTIVE_GUESTS; 
    $result = mysqli_query($con,$q); 
    $this->num_active_guests = mysqli_num_rows($result); 
    } 


    function addActiveUser($username, $time){ 
GLOBAL $con; 
    $q = "UPDATE ".TBL_USERS." SET timestamp = '$time' WHERE username = '$username'"; 
    mysqli_query($con,$q); 

    if(!TRACK_VISITORS) return; 
    $q = "REPLACE INTO ".TBL_ACTIVE_USERS." VALUES ('$username', '$time')"; 
    mysqli_query($con,$q); 
    $this->calcNumActiveUsers(); 
    } 

function addActiveGuest($ip, $time){ 
GLOBAL $con; 
    if(!TRACK_VISITORS) return; 
    $q = "REPLACE INTO ".TBL_ACTIVE_GUESTS." VALUES ('$ip', '$time')"; 
    mysqli_query($con,$q); 
    $this->calcNumActiveGuests(); 
    } 

function removeActiveUser($username){ 
GLOBAL $con; 
    if(!TRACK_VISITORS) return; 
    $q = "DELETE FROM ".TBL_ACTIVE_USERS." WHERE username = '$username'"; 
    mysqli_query($con,$q); 
    $this->calcNumActiveUsers(); 
    } 

/* removeActiveGuest */ 
function removeActiveGuest($ip){ 
GLOBAL $con; 
    if(!TRACK_VISITORS) return; 
    $q = "DELETE FROM ".TBL_ACTIVE_GUESTS." WHERE ip = '$ip'"; 
    mysqli_query($con,$q); 
    $this->calcNumActiveGuests(); 
} 

/* removeInactiveUsers */ 
function removeInactiveUsers(){ 
GLOBAL $con; 
    if(!TRACK_VISITORS) return; 
    $timeout = time()-USER_TIMEOUT*60; 
    $q = "DELETE FROM ".TBL_ACTIVE_USERS." WHERE timestamp < $timeout"; 
    mysqli_query($con,$q); 
    $this->calcNumActiveUsers(); 
} 

/* removeInactiveGuests */ 
function removeInactiveGuests(){ 
GLOBAL $con; 
    if(!TRACK_VISITORS) return; 
    $timeout = time()-GUEST_TIMEOUT*60; 
    $q = "DELETE FROM ".TBL_ACTIVE_GUESTS." WHERE timestamp < $timeout"; 
    mysqli_query($con,$q); 
    $this->calcNumActiveGuests(); 
} 


function query($query){ 
GLOBAL $con; 
    return mysqli_query($con,$query); 
} 
}; 


    $database = new MySQLDB; 

    ?> 
+0

这些错误是从哪一行开始的? –

+4

这是代码是非常糟糕的。你正在使用addslashes/stripslashes,它比** USELESS **对sql注入阻止更糟糕,在使用mysqli之前已经有了完美的转义机制,ON已经准备好了声明/占位符功能,无论如何做手动转义。 –

回答

2

错误相当含糊,但具体。它表示预计有一个连接对象mysql_result,但它正在接收null

这样做的原因是,你是如何尝试使用每个功能内部的连接:

global $con; 
mysqli_query($con, $q); 

global关键字带来全局变量你在使用它的功能,但$con不是此类中的全局变量(并且,您不需要在类内部使用global)。你正在寻找的是$this关键字。

在您的类构造函数MySQLDB()中,您定义了$con变量;你应该将其更改为使用$this->connection因为你已经定义了名为$connection一个全局变量:

$this->connection = mysqli_connect(DB_SERVER, DB_USER, DB_PASS,DB_NAME); 

然后,在每一个功能,而不是使用这样的:

global $con; 
mysqli_query($con,$q); 

您可以使用:

mysqli_query($this->connection, $q); 
1

您在构造函数中定义了$con(因为您为它准备了一个变量,所以您应该在$this->connection中存储它)。由于它是在函数中定义的,因此它不是全局变量,因此无法使用global $con;导入。如果您在任何地方正确使用$this->connection,请使用连接处理程序,那么它应该可以正常工作。

相关问题