错误消息我得到:我收到此错误消息。我应该采取什么措施来解决了这个问题
警告:mysqli_fetch_object()预计参数1是 mysqli_result,布尔在 C中给出:\ XAMPP \ htdocs中\ payerday \包括\在线路database.php中83
警告:mysqli_free_result()预计参数1被mysqli_result,在C中给出 布尔:\ XAMPP \ htdocs中\ payerday \包括关于 线90
警告\ database.php中:mysqli_fetch_object( )期望参数1是 mysqli_result,布尔在 C中给出:\ XAMPP \ htdocs中\ payerday \包括在线路\ database.php中83
警告:mysqli_free_result()预计参数1被mysqli_result,在给定的 布尔C:\ XAMPP \ htdocs中\ payerday \包括\ database.php中上 线90
我的代码:
从database.php中
<?php
require_once(LIB_PATH.DS."config.php");
class Database {
var $sql_string = '';
var $error_no = 0;
var $error_msg = '';
private $conn;
public $last_query;
private $magic_quotes_active;
private $real_escape_string_exists;
function __construct() {
$this->open_connection();
$this->magic_quotes_active = get_magic_quotes_gpc();
$this->real_escape_string_exists = function_exists("mysqli_real_escape_string");
}
public function open_connection() {
$this->conn = mysqli_connect(DB_SERVER,DB_USER,DB_PASS);
if(!$this->conn){
echo "Problem in database connection! Contact administrator!";
exit();
}else{
$db_select = mysqli_select_db($this->conn,DB_NAME);
if (!$db_select) {
if($this->createDB()){
$db_select = mysqli_select_db($this->conn,DB_NAME);
$tableFile = LIB_PATH.DS.'db_tables.sql';
if($handle = fopen($tableFile, 'r')){
$content = fread($handle, filesize($tableFile));
fclose($handle);
}
$queries = split(';', $content);
foreach($queries as $Query){
$this->setQuery($Query);
$this->executeQuery();
}
}else{
echo "Problem in creating database! Contact administrator!";
exit();
}
}
}
}
function createDB(){
$this->setQuery("CREATE DATABASE IF NOT EXISTS `".DB_NAME."`");
$result = $this->executeQuery();
return $result;
}
function setQuery($sql='') {
$this->sql_string=$sql;
}
function executeQuery() {
$result = mysqli_query($this->conn,$this->sql_string);
$this->confirm_query($result);
return $result;
}
private function confirm_query($result) {
if(!$result){
$this->error_no = mysqli_errno($this->conn);
$this->error_msg = mysqli_error($this->conn);
return false;
}
return $result;
}
function loadResultList($key='') {
$cur = $this->executeQuery();
$array = array();
while ($row = mysqli_fetch_object($cur)) {
if ($key) {
$array[$row->$key] = $row;
} else {
$array[] = $row;
}
}
mysqli_free_result($cur);
return $array;
}
function loadSingleResult() {
$cur = $this->executeQuery();
$data = "";
while ($row = mysqli_fetch_object($cur)) {
$data = $row;
}
mysqli_free_result($cur);
return $data;
}
function getFieldsOnOneTable($tbl_name) {
$this->setQuery("DESC ".$tbl_name);
$rows = $this->loadResultList();
$f = array();
for ($x=0; $x<count($rows); $x++) {
$f[] = $rows[$x]->Field;
}
return $f;
}
public function fetch_array($result) {
return mysqli_fetch_array($result);
}
//gets the number or rows
public function num_rows($result_set) {
return mysqli_num_rows($result_set);
}
public function insert_id() {
// get the last id inserted over the current db connection
return mysqli_insert_id($this->conn);
}
public function affected_rows() {
return mysqli_affected_rows($this->conn);
}
public function escape_value($value) {
if($this->real_escape_string_exists) { // PHP v4.3.0 or higher
// undo any magic quote effects so mysqli_real_escape_string can do the work
if($this->magic_quotes_active) { $value = stripslashes($value); }
$value = mysqli_real_escape_string($this->conn,$value);
} else { // before PHP v4.3.0
// if magic quotes aren't already on then add slashes manually
if(!$this->magic_quotes_active) { $value = addslashes($value); }
// if magic quotes are active, then the slashes already exist
}
return $value;
}
public function close_connection() {
if(isset($this->conn)) {
mysqli_close($this->conn);
unset($this->conn);
}
}
}
$mydb = new Database();
?>
我database_object.php代码
<?php
class DatabaseObject {
function db_fields(){
global $mydb;
return $mydb->getFieldsOnOneTable(static::$tbl_name);
}
static function listAll(){
global $mydb;
$mydb->setQuery("SELECT *
FROM ".static::$tbl_name);
$cur = $mydb->loadResultList();
return $cur;
}
static function single($id=""){
global $mydb;
$mydb->setQuery("SELECT * FROM ".static::$tbl_name." WHERE id= '{$id}' LIMIT 1");
$cur = $mydb->loadSingleResult();
if($cur)
return $cur;
else
return false;
}
/*---Instantiation of Object dynamically---*/
static function instantiate($record) {
$object = new static;
foreach($record as $attribute=>$value){
if($object->has_attribute($attribute)) {
$object->$attribute = $value;
}
}
return $object;
}
/*--Cleaning the raw data before submitting to Database--*/
private function has_attribute($attribute) {
// We don't care about the value, we just want to know if the key exists
// Will return true or false
return array_key_exists($attribute, $this->attributes());
}
protected function attributes() {
// return an array of attribute names and their values
global $mydb;
$attributes = array();
foreach($this->db_fields() as $field) {
if(property_exists($this, $field)) {
$attributes[$field] = $this->$field;
}
}
return $attributes;
}
protected function sanitized_attributes() {
global $mydb;
$clean_attributes = array();
// sanitize the values before submitting
// Note: does not alter the actual value of each attribute
foreach($this->attributes() as $key => $value){
$clean_attributes[$key] = $mydb->escape_value($value);
}
return $clean_attributes;
}
/*--Create,Update and Delete methods--*/
public function save() {
// A new record won't have an id yet.
return isset($this->id) ? $this->update() : $this->create();
}
public function create() {
global $mydb;
// Don't forget your SQL syntax and good habits:
// - INSERT INTO table (key, key) VALUES ('value', 'value')
// - single-quotes around all values
// - escape all values to prevent SQL injection
$attributes = $this->sanitized_attributes();
$sql = "INSERT INTO ".static::$tbl_name." (";
$sql .= join(", ", array_keys($attributes));
$sql .= ") VALUES ('";
$sql .= join("', '", array_values($attributes));
$sql .= "')";
echo $mydb->setQuery($sql);
if($mydb->executeQuery()) {
$this->id = $mydb->insert_id();
return true;
} else {
return false;
}
}
public function update($id="") {
global $mydb;
$attributes = $this->sanitized_attributes();
$attribute_pairs = array();
foreach($attributes as $key => $value) {
$attribute_pairs[] = "{$key}='{$value}'";
}
$sql = "UPDATE ".static::$tbl_name." SET ";
$sql .= join(", ", $attribute_pairs);
$sql .= " WHERE id='{$id}'";
$mydb->setQuery($sql);
if($mydb->executeQuery())
return true;
else
return false;
}
public function delete($id="") {
global $mydb;
$sql = "DELETE FROM ".static::$tbl_name;
$sql .= " WHERE id='{$id}'";
$sql .= " LIMIT 1 ";
$mydb->setQuery($sql);
if($mydb->executeQuery())
return true;
else
return false;
}
}
?>
user.php的代码
<?php
require_once(LIB_PATH.DS.'database.php');
class User extends DatabaseObject {
protected static $tbl_name = "users";
static function AuthenticateUser($email="", $h_upass=""){
global $mydb;
$mydb->setQuery("SELECT * FROM `".self::$tbl_name."` WHERE (`email`='" . $email . "' and `password`='" . $h_upass ."')
OR (`username`='" . $email . "' and `password`='" . $h_upass ."') LIMIT 1");
$cur = $mydb->executeQuery();
$row_count = $mydb->num_rows($cur);//get the number of count
if ($row_count == 1){
$found_user = $mydb->loadSingleResult();
if(!$found_user->blocked){
$_SESSION['id'] = $found_user->id;
$_SESSION['user'] = $found_user;
$_SESSION['email'] = $found_user->email;
$_SESSION['account_type'] = $found_user->type;
$_SESSION['blocked'] = false;
}else{
$_SESSION['blocked'] = true;
}
return true;
}else{
return false;
}
}
static function userWithEmail($email=""){
global $mydb;
$mydb->setQuery("SELECT * FROM ".self::$tbl_name." WHERE `email` ='{$email}' LIMIT 1");
$cur = $mydb->loadSingleResult();
if($cur)
return $cur;
else
return false;
}
static function userWithUsername($username=""){
global $mydb;
$mydb->setQuery("SELECT * FROM ".self::$tbl_name." WHERE `username` ='{$username}' LIMIT 1");
$cur = $mydb->loadSingleResult();
if($cur)
return $cur;
else
return false;
}
static function userWithBankAccount($account_no=""){
global $mydb;
$mydb->setQuery("SELECT * FROM ".self::$tbl_name." WHERE `account_no` ='{$account_no}' LIMIT 1");
$cur = $mydb->loadSingleResult();
if($cur)
return $cur;
else
return false;
}
static function nextUserToMatch($amount=0){
global $mydb;
$mydb->setQuery("SELECT * FROM ".self::$tbl_name." WHERE no_matched < 3 AND `type` ='administrator' AND NOT blocked ORDER BY time_confirmed ASC LIMIT 1");
$user = $mydb->loadSingleResult();
if($user){
return $user;
}else{
$mydb->setQuery("SELECT * FROM ".self::$tbl_name." WHERE no_matched < 3 AND `amount` ={$amount} AND payment_confirmed AND NOT blocked ORDER BY time_confirmed ASC LIMIT 1");
$user = $mydb->loadSingleResult();
return $user;
}
}
static function nextUserToMatchNotAdmin($amount=0){
global $mydb;
$mydb->setQuery("SELECT * FROM ".self::$tbl_name." WHERE no_match_left < 3 AND `amount` ={$amount} AND payment_confirmed AND NOT blocked ORDER BY time_confirmed ASC LIMIT 1");
$user = $mydb->loadSingleResult();
return $user;
}
static function nextWithHelpWaiting($amount=0){
global $mydb;
$offset = 0;
do{
$mydb->setQuery("SELECT * FROM ".self::$tbl_name." WHERE no_match_left != 0 AND `amount` ={$amount} AND NOT payment_confirmed AND NOT matched_to_pay AND NOT blocked ORDER BY time_amount_pledged ASC LIMIT 1 OFFSET {$offset}");
$user = $mydb->loadSingleResult();
if($user){
//echo $user->id; exit;
$helpNo = Help::noOfUserMatched($user->id);
if($user->need_recycle_match){
//$user = false;
$helpNo = 0;
}
}else{
$helpNo = 0;
}
$offset++;
}while($helpNo != 0);
return $user;
}
static function block($user_id=0){
global $mydb;
$mydb->setQuery("SELECT * FROM ".self::$tbl_name." WHERE `id` = {$user_id} LIMIT 1");
$user = $mydb->loadSingleResult();
if($user){
$nuser = new self();
$nuser->blocked = true;
$nuser->modified = currentTime();
if($nuser->update($user->id)) return true;
else return false;
}
}
static function checkIfBlocked($user_id=0){
global $mydb;
$mydb->setQuery("SELECT * FROM ".self::$tbl_name." WHERE id = {$user_id} LIMIT 1");
$user = $mydb->loadSingleResult();
if($user->blocked){
echo '<script type="text/javascript">
alert("This Account have been blocked.");';
echo ' window.location = "'.WEB_ROOT.'login/"
</script>';
if(isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-42000, '/');
}
session_destroy();
return true;
}
else return false;
}
static function removeFromNoMatchLeft($user_id=0){
$user = Self::single($user_id);
$nuser = new self();
$nuser->no_match_left = $user->no_match_left - 1;
$cur = $nuser->update($user->id);
return $cur;
}
}
?>
我help.php代码
<?php
// UPDATE `users` SET `no_remove_left`=3 WHERE 1
require_once(LIB_PATH.DS.'database.php');
class Help extends DatabaseObject {
protected static $tbl_name = "helps";
static function listOfUser($user_id=0){
global $mydb;
$mydb->setQuery("SELECT * FROM ".self::$tbl_name." WHERE `gh_user_id` ='{$user_id}' ORDER BY created DESC");
$cur = $mydb->loadResultList();
return $cur;
}
static function listOfUserMatched($user_id=0){
global $mydb;
$mydb->setQuery("SELECT * FROM ".self::$tbl_name." WHERE ((`gh_user_id` ={$user_id} OR `ph_user_id` ={$user_id}) AND matched) OR (`gh_user_id` ={$user_id} AND `type` ='referrer') ORDER BY created DESC");
$cur = $mydb->loadResultList();
return $cur;
}
static function listOfAdminsMatched(){
global $mydb;
$mydb->setQuery("SELECT * FROM ".self::$tbl_name." WHERE matched AND `user_type`='administrator' AND NOT `invis` ORDER BY created DESC");
$cur = $mydb->loadResultList();
return $cur;
}
static function listMatchedNotPaid(){
global $mydb;
$mydb->setQuery("SELECT * FROM ".self::$tbl_name." WHERE matched AND NOT paid");
$cur = $mydb->loadResultList();
return $cur;
}
static function ofUserAllConfirmed(){
global $mydb;
$user_id = $_SESSION['id'];
$mydb->setQuery("SELECT * FROM ".self::$tbl_name." WHERE gh_user_id={$user_id} LIMIT 1");
$cur = $mydb->loadSingleResult();
if($cur){
$mydb->setQuery("SELECT * FROM ".self::$tbl_name." WHERE gh_user_id={$user_id} AND NOT confirmed LIMIT 1");
$cur1 = $mydb->loadSingleResult();
if($cur1) return false;
else return true;
}else{
return false;
}
}
static function checkUsersWhoHaveNotpaid(){
global $mydb;
$helps = self::listMatchedNotPaid();
foreach($helps as $help){
$timeLeft = self::timeLeft($help->id);
if($timeLeft == 'time up'){
$user = User::single($help->gh_user_id);
$amount = $help->amount;
$nhelp = new self();
$nhelp->delete($help->id);
$nhelp = new self();
$nhelp->gh_user_id = $user->id;
$nhelp->type = 'GH';
$nhelp->amount = $amount;
$nhelp->user_type = $help->user_type;
$nhelp->created = currentTime();
$nhelp->modified = currentTime();
$nhelp->create();
/*$nhelp = new self();
$nhelp->ph_user_id = 0;
$nhelp->matched = false;
$nhelp->paid = false;
$nhelp->time_matched = 0;
$nhelp->modified = currentTime();
$nhelp->update($help->id);*/
$nuser = new User();
$nuser->no_match_left = $user->no_match_left + 1;
$nuser->modified = currentTime();
$nuser->update($help->gh_user_id);
User::block($help->ph_user_id);
}
}
}
static function timeLeft($help_id=0){
global $mydb;
$mydb->setQuery("SELECT * FROM ".self::$tbl_name." WHERE `id` ={$help_id} AND matched AND NOT paid LIMIT 1");
$help = $mydb->loadSingleResult();
if($help){
$date2 = $help->payment_deadline;
$tdate1 = zoneTime();
$tdate2 = strtotime($date2);
$tdate3 = $tdate2 - $tdate1;
$hour = (int) ($tdate3/(60 * 60));
$hrem = $tdate3 % (60 * 60);
$min = (int) ($hrem/60);
$mrem = $hrem % 60;
$sec = $mrem;
if($hour <= 0 AND $min <= 0 AND $sec <= 0){
return 'time up';
}else{
if($hour < 10) $hour = '0'.$hour;
if($min < 10) $min = '0'.$min;
if($sec < 10) $sec = '0'.$sec;
$fdate = $hour.':'.$min.':'.$sec;
return $fdate;
}
}else{
return false;
}
}
static function noOfUserMatched($user_id=0){
global $mydb;
$mydb->setQuery("SELECT * FROM ".self::$tbl_name." WHERE (`gh_user_id` ={$user_id} OR `ph_user_id` ={$user_id}) AND matched");
$cur = $mydb->executeQuery();
$row_count = $mydb->num_rows($cur);
return $row_count;
}
static function matchWith($amount=0){
global $mydb;
global $hoursToPay;
$user = User::single($_SESSION['id']);
$mydb->setQuery("SELECT * FROM ".self::$tbl_name." WHERE `gh_user_id` != {$user->referrer_id} AND user_type='administrator' AND amount={$amount} AND NOT matched ORDER BY created ASC LIMIT 1");
$help = $mydb->loadSingleResult();
if(!$help){
$mydb->setQuery("SELECT * FROM ".self::$tbl_name." WHERE `gh_user_id` != {$user->referrer_id} AND amount={$amount} AND NOT matched ORDER BY created ASC LIMIT 1");
$help = $mydb->loadSingleResult();
}
if($help){
$nhelp = new self();
$nhelp->ph_user_id = $_SESSION['id'];
$nhelp->matched = true;
$nhelp->payment_deadline = toMSQLDateTime(zoneTime() + ($hoursToPay * 60 * 60));
if($help->user_type == 'administrator') $nhelp->amount = $amount;
$nhelp->time_matched = currentTime();
$nhelp->modified = currentTime();
$nhelp->update($help->id);
$nuser = new User();
$nuser->matched_to_pay = 1;
$nuser->need_recycle_match = false;
$nuser->modified = currentTime();
$nuser->update($user->id);
User::removeFromNoMatchLeft($help->gh_user_id);
}
return true;
}
static function runMatching(){
global $mydb;
global $hoursToPay;
$mydb->setQuery("SELECT * FROM ".self::$tbl_name." WHERE NOT matched ORDER BY created ASC");
$helps = $mydb->loadResultList();
foreach($helps as $help){
$user = User::nextWithHelpWaiting($help->amount);
if($user){
$nhelp = new self();
$nhelp->ph_user_id = $user->id;
$nhelp->matched = true;
$nhelp->payment_deadline = toMSQLDateTime(zoneTime() + ($hoursToPay * 60 * 60));
$nhelp->time_matched = currentTime();
$nhelp->modified = currentTime();
$nhelp->update($help->id);
$nuser = new User();
$nuser->matched_to_pay = 1;
$nuser->need_recycle_match = false;
$nuser->modified = currentTime();
$nuser->update($user->id);
User::removeFromNoMatchLeft($help->gh_user_id);
}
}
return true;
}
}
?>
我comment.php代码
<?php
require_once(LIB_PATH.DS.'database.php');
class Comment extends DatabaseObject {
protected static $tbl_name = "comments";
static function onPost($post_id=0,$text=""){
$comment = new self();
$comment->user_id = $_SESSION['id'];
$comment->post_id = $post_id;
$comment->text = $text;
$comment->created = currentTime();
$comment->modified = currentTime();
if($comment->create()){
$commentUser = User::single($_SESSION['id']);
return '<tr>
<td width="30"><a href="index.php?view=profile&id='.$commentUser->id.'"><img src="'. userPofilePicture($commentUser).'" height="30" width="30" /></a></td>
<td>'.$comment->text.'</td>
</tr>';
}else{
return false;
}
}
static function deleteByUser($comment_id=0){
$comment = self::single($comment_id);
if($comment->user_id == $_SESSION['id']){
$commen = new self();
if($commen->delete($comment->id)){
$react_id=1;
return '<a href="" onclick="likePost('.$post_id .','.$react_id.'); return noOfLikesOnPost('.$post_id.');" ><span class="glyphicon glyphicon-thumbs-up"></span> Like</a>';
}else{
return false;
}
}
}
static function listOnComment($post_id=0){
global $mydb;
$mydb->setQuery("SELECT * FROM ".self::$tbl_name." WHERE post_id= {$post_id} ORDER BY created ASC");
$cur = $mydb->loadResultList();
return $cur;
}
static function noOfCommentsOnPost($post_id=0){
global $mydb;
$mydb->setQuery("SELECT * FROM ".self::$tbl_name." WHERE post_id= {$post_id}");
$cur = $mydb->executeQuery();
$row_count = $mydb->num_rows($cur);
return $row_count;
}
}
?>
我的funds_adder.php
<?php
require_once(LIB_PATH.DS.'database.php');
class FundsAdder extends DatabaseObject {
protected static $tbl_name = "funds_adder";
static function check(){
global $mydb;
$mydb->setQuery("SELECT * FROM ".self::$tbl_name." WHERE `id` = 1 LIMIT 1");
$cur = $mydb->loadSingleResult();
$currDate = currentDate();
if($cur->date_last_updated != $currDate){
$lastUpdated = strtotime($cur->date_last_updated);
$currDate = strtotime($currDate);
$diff = $currDate - $lastUpdated;
$day = 24*60*60;
$dayDiff = $diff/$day;
$daysNo = (int) $dayDiff;
$helps = Help::listAll();
foreach ($helps as $help) {
if($help->type == "GH") continue;
$nhelp = new Help();
$nhelp->funds = $help->funds + ($help->dayly_interest * $daysNo);
$nhelp->update($help->id);
}
$fundsAdder = new self();
$fundsAdder->date_last_updated = currentDate();
$fundsAdder->update($cur->id);
}
}
}
?>
请添加不能正常工作的查询。 –
我更新了代码 – Millz
不知何故'executeQuery()'返回false。您的查询必须无效,您可以在PHPMyAdmin(或任何您使用的)中尝试查询。 –