Я попытался изменить mysql на mysqli. И когда я делаю это, я получаю ошибку. Я пробовал все, но я не нашел для этого решения.
Ошибка, которую у меня есть: (что вы видите, это не все ошибки)
Предупреждение: mysqli_query () ожидает, что параметр 1 будет mysqli, null указан в
C: \ xampp \ htdocs \ follow \ include \ database.php в строке 219Предупреждение: mysqli_num_rows () ожидает, что параметр 1 будет mysqli_result, null указан в C: \ xampp \ htdocs \ follow \ include \ database.php в строке 220
Предупреждение: mysqli_query () ожидает, что параметр 1 будет mysqli, null указан в C: \ xampp \ htdocs \ follow \ include \ database.php в строке 231
Предупреждение: mysqli_num_rows () ожидает, что параметр 1 будет mysqli_result, null указан в C: \ xampp \ htdocs \ follow \ include \ database.php в строке 232
Предупреждение: mysqli_query () ожидает, что параметр 1 будет mysqli, null указан в C: \ xampp \ htdocs \ follow \ include \ 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; ?>
Ошибка довольно неопределенная, но конкретная. Он заявляет, что ожидается объект соединения, mysql_result
, но вместо этого он принимает значение null
.
Причина этого заключается в том, как вы пытаетесь использовать соединение внутри каждой функции:
global $con; mysqli_query($con, $q);
global
ключевое слово приведет к глобальным переменным функции, в которой вы его используете, но $con
не является глобальной переменной в этом классе (и вам не нужно использовать global
внутренние классы). Вместо этого вы ищете $this
keyword.
В вашем конструкторе классов 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);
Вы определяете $con
в своем конструкторе (который вы должны хранить в $this->connection
поскольку вы подготовили для него переменную). Поскольку он определен в функции, он не является глобальной переменной и поэтому не может быть импортирован с global $con;
, Если вы правильно используете $this->connection
везде, где используете обработчик соединения, тогда он должен работать.