我试图将我的mysql更改为mysqli。当我这样做时,我得到错误。我尝试了一切,但我找不到解决方案。
我遇到的错误:(你看到的不是所有的错误)
警告:mysqli_query()期望参数1为mysqli,在
中给出为null 第219行的C:\ xampp \ htdocs \ follow \ include \ database.php警告:mysqli_num_rows()要求参数1为mysqli_result,在第220行的C:\ xampp \ htdocs \ follow \ include \ database.php中给出null
警告:mysqli_query()要求参数1为mysqli,在第231行的C:\ xampp \ htdocs \ follow \ include \ database.php中给出null
警告:mysqli_num_rows()要求参数1为mysqli_result,在第232行的C:\ xampp \ htdocs \ follow \ include \ database.php中给出null
警告:mysqli_query()要求参数1为mysqli,在第102行的C:\ xampp \ htdocs \ follow \ include \ database.php中给出null
...更多错误
这是我的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 :(得分:3)
错误相当模糊,但具体。它声明连接对象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 :(得分:1)
你在构造函数中定义$con
(因为你为它准备了一个变量,你应该存储在$this->connection
中)。因为它是在函数中定义的,所以它不是全局变量,因此无法使用global $con;
导入。如果您在使用连接处理程序的任何地方正确使用$this->connection
,那么它应该可以正常工作。
答案 2 :(得分:0)
只需通过将用户添加到数据库来管理用户权限。将会解决问题