SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Der CSS-Problemlöser

Der CSS-Problemlöser zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 22.02.2015, 20:23:17
ToM80 ToM80 ist offline
Anfänger
 
Registriert seit: Feb 2015
Alter: 37
Beiträge: 2
ToM80 befindet sich auf einem aufstrebenden Ast
Probleme mit mysqli Datenbankklasse

Meine Klasse:
PHP-Code:
 <?php
class MyDb extends mysqli {
    private 
$mydb_server    "localhost";
    private 
$mydb_user        "root";
    private 
$mydb_pass        "";
    private 
$mydb_char        "UTF-8";
    private 
$mydb_base        "dbToUse";
    private 
$mydb_Obj;
    private 
$mydb_publicParamsArr;
    
    
/**
     * This function setup the parameters for the database connection and uses the connect method for open a connection
     * @param string $charset
     * @param string $database
     * @param string $user
     * @param string $pass
     * @param string $server
     * @return boolean
     */
    
public function __construct($charset=null,$database=null,$user=null,$pass=null,$server=null) {
        
$this->mydb_publicParamsArr=array('mydb_char','mydb_base');
        if (
$charset!==null) {
            
$this->mydb_char=$db_charset;
        }
        if (
$database!==null) {
            
$this->mydb_char=$database;
        }
        if (
$user!==null) {
            
$this->mydb_char=$user;
        }
        if (
$pass!==null) {
            
$this->mydb_char=$pass;
        }
        if (
$server!==null) {
            
$this->mydb_char=$server;
        }
        if (!
$this->mydb_Obj=new mysqli($this->mydb_server,$this->mydb_user,$this->mydb_pass,$this->mydb_base)) {
            
$paramArr=array(); //TODO: Fill this array whith connection data
            
logError('mydbConnect1'$paramArr);
        }
    }
    
    public function 
doQuery($type,$params) {
        
$results='';
        
$sql=$this->buildQuery($type,$params);
        if (
$type=="s") {
            
//SELECT PREPARE STATEMENT
            
if (!$this->mydb_Obj->connect_errno) {
                if (
$q=$this->mydb_Obj->stmt_init()) {
                    
createLogFileForTesting("testok.txt",$sql."\nt:".$type."\np:".serialize($params));
                } else {
                    
createLogFileForTesting("testok.txt",$this->mydb_Obj->error);
                }    
            } else {
                
createLogFileForTesting("testfailed.txt",$sql."\nt:".$type."\np:".serialize($params));
                return 
'FAILED';
            }
            if (
$q->prepare($sql)) {
                
$bindings=explode(BREAKER,$this->bindParams($params,'where','whereType'));
                
$bindingType=$bindings[0];
                
$bindingValue=$bindings[1];
                
$paramArr=unserialize($bindings[2]);
                
$bind_names=$this->bindNames($q,$paramArr$bindingType);
                
$q->execute();
                
$bind_result=$this->bindResult($q,$q->result_metadata());
                if (
$fields=$this->bindResult($q,$q->result_metadata())) {
                    
$results=$this->fetchResults($q,$fields);
                } else {
                    
$paramArr=array(); //TODO: Fill this Array with request Data
                    
logError('MyDbRequestFailed1'$paramArr);
                }
                
$q->close();
            } else {
                
$paramArr=array('sql=>'.$sql); //TODO: Fill this array with helping things
                
logError("MyDbSelectPreparationFailed"$paramArr);
            }
        } elseif (
$type=="u") {
            
$q=$this->mydb_Obj->stmt_init();
            if (
$q->prepare($sql)) {
                
//BINDEN VON SET UND WHERE ZUSAMMENFASSEN!!
                
$bindings=explode(BREAKER,$this->bindParams($params,'set','setType'));
                
$bindingType=$bindings[0];
                
$bindingValue=$bindings[1];
                
$paramArr=unserialize($bindings[2]);
                
$bindings2=explode(BREAKER,$this->bindParams($params,'where','whereType'));
                
$bindingType.=$bindings2[0];
                
$bindingValue.=','.$bindings2[1];
                
$paramArr=array_merge($paramArr,unserialize($bindings2[2]));
                
$bind_names=$this->bindNames($q,$paramArr$bindingType);
                
$q->execute();
                
$q->close();
            } else {
                
$paramArr=array('sql=>'.$sql); //TODO: Fill this array with helping things
                
logError("MyDbUpdatePreparationFailed"$paramArr);
                return 
"MyDbUpdatePreparationFailed";
            }
        }
        return 
$results;    
    }
    
/**
     * This method creates the binding Parameters for prepared statements
     * @param array $params
     * @param string $key1
     * @param string $key2
     * @return string
     */
    
private function bindParams($params,$key1,$key2) {
        
$e=0;
        
$cWhere=count($params[$key1]);
        
$bindingType="";
        
$bindingValue="";
        
$paramArr=array();
        foreach (
$params[$key1] as $key => $value) {
            
$bindingType.=$params[$key2][$e];
            
$bindingValue.=$value;
            
$paramArr[]=$value;
            if (
$cWhere>1) {
                
$bindingValue.=', ';
            }
            
$e++;
            
$cWhere--;
        }
        return 
$bindingType.BREAKER.$bindingValue.BREAKER.serialize($paramArr);
    }
    
/**
     * This method creates the bindingnames string for prepared statements
     * @param object $q
     * @param array $paramArr
     * @param string $bindingType
     * @return array
     */
    
private function bindNames($q,$paramArr,$bindingType) {
        
$bind_names[]=$bindingType;
        for (
$i=0$i<count($paramArr);$i++) {
            
$bind_name 'bind' $i;
            $
$bind_name $paramArr[$i];
            
$bind_names[] = &$$bind_name;
        }
        
call_user_func_array(array($q,'bind_param'),$bind_names);
        return 
$bind_names;
    }
    
/**
     * This method bind the parameters for the fetch results for prepared statements 
     * @param object $q
     * @param object $meta
     * @return array
     */
    
private function bindResult($q,$meta) {
        
$var='';
        
$fields=array();
        while (
$field $meta->fetch_field()) {
            
$var $field->name;
            $
$var null;
            
$fields[$var] = &$$var;
        }
        
call_user_func_array(array($q,'bind_result'),$fields);
        return 
$fields;
        
    }
    
    
/**
     * This method build the needed SQL query
     * @param string $type
     * @param array $params
     * @return string
     */
    
private function buildQuery($type,$params) {
        switch (
$type) {
            case 
"s":
                
//SELECT
                
$sql='SELECT '.$params['what'].' FROM '.$params['table'];
                if (
in_array("innerJoin"$params)) {
                    
$sql.=' INNER JOIN '.$params['innerJoin'].' ON '.$params['innerJoinOn'];
                }
                if (
array_key_exists("where"$params)) {
                    
$sql.=' WHERE ';
                    
$e=0;
                    
$cWhere=count($params['where']);
                    foreach (
$params['where'] as $key => $value) {
                        
$sql.=$key.'=?';
                        if (
$cWhere>1) {
                            
$sql.=' AND ';
                        }
                        
$e++;
                        
$cWhere--;
                    }
                }
                if (
in_array("sort"$params)) {
                    
$sql.=' SORT BY '.$parmas['sort'];
                }
                if (
in_array('limit'$params)) {
                    
$sql.=' LIMIT '.$params['limit'];
                }
            break;
        }
        return 
$sql;
    }
}
Mein Problem:
Ich greife auf die Klasse von weiteren Klassen, so auch der Klasse User zu. Nachdem sich der Nutzer erfolgreich angemeldet hat (hier funktioniert obriges einwandfrei), möchte ich auf einer weiteren Seite Abfragen, ob der Nutzer entsprechende Rechte hat.
Hierzu gibt es folgende Methode in der Class User:

PHP-Code:
public function hasRight($right) {
        
$whereArr=array("userName"=>$this->userName);
        
$paramsArr=array(
                
"what"=>"userRights",
                
"table"=>"tbl_user",
                
"whereType"=>$this->db->genTypes($whereArr),
                
"where"=>$whereArr
        
);
        
$res=$this->db->doQuery("s",$paramsArr);
        if (
count($res)==1) {
            
$rightArr=unserialize($res[0]['userRights']);
            if ((
in_array($right,$rightArr)) || (in_array('*',$rightArr))) {
                return 
true;
            } else {
                return 
false;
            }
        } else {
            
logError('rightCheck2', array('class'=>'User'));
            return 
false;
        }
    } 
Bei der Abfrage erscheint nun aber:
Code:
Warning: mysqli::stmt_init(): Couldn't fetch mysqli in C:\entwicklung\xampp_travel\htdocs\skysimadmin\inc\class\MyDb.class.inc.php on line 53
Fatal error: Call to a member function prepare() on null in C:\entwicklung\xampp_travel\htdocs\skysimadmin\inc\class\MyDb.class.inc.php on line 62
Mit Zitat antworten
  #2  
Alt 22.02.2015, 20:25:40
ToM80 ToM80 ist offline
Anfänger
 
Registriert seit: Feb 2015
Alter: 37
Beiträge: 2
ToM80 befindet sich auf einem aufstrebenden Ast
AW: Probleme mit mysqli Datenbankklasse

Da mein Text zulang war, habe ich die Klasse MyDb entsprechend um unwesentliche Punkte gekürzt
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
MySQL auf MySQLi umstellen dasc93 MySQL 6 31.05.2014 01:34:52
Mysqli Probleme Socrates MySQL 8 22.08.2008 02:17:18
Probleme mit mysql Erweiterung Don Stefano PHP Grundlagen 2 18.07.2005 14:24:44
mysqli nicht gefunden Don Stefano PHP Grundlagen 1 25.02.2005 16:44:49
PHP mail() funktion und server probleme flobee PHP für Fortgeschrittene und Experten 0 03.07.2002 02:18:27


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:36:31 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.


© 2001-2017 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt