Jak použít metodu třídu je uvnitř funkce (PHP)?

hlasů
2

Snažím se používat nové rozšíření PHP mysqli. Mám funkci (trezor ()), která rekurzivně používá mysql_real_escape_string aby struny v bezpečí. Jak mohu používat svůj mysqli spojení uvnitř této funkce volání funkce mysqli :: escape_string ()?

Příklad:

$db = new mysqli($host,$user,$password,$database_name);


function safe ($data) {
  if(!is_array($data)) {
     if(!get_magic_quotes_gpc()) {
       $data = **mysqli::escape_string($data)**
       return $data;
    }
  } else {
    return array_map('safe',$data);
  }
}

Kde jsem mysqli :: escape_string () uvnitř trezoru () Jak říkám, že? Mimo funkce by bylo $ DB> escape_string (), ale nemohu najít způsob, jak ji volat insde. Snažil jsem se předávání $ db do funkce, což $ db globální atd. Alternativou je použít procedurální mysqli_escape_string (), ale který vyžaduje mysqli propojení zdroje, které mají být explicitně předány, ale nemohu najít způsob, jak přistupovat to.

Položena 26/08/2009 v 22:34
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
6

projít si DB objekt do funkce.

 function safe ($data, $db) {
  if(!is_array($data)) {
     if(!get_magic_quotes_gpc()) {
       $data = $db->escape_string($data);
    }
  } else {
    return array_map('safe',$data);
  }
}
Odpovězeno 26/08/2009 v 22:39
zdroj uživatelem

hlasů
1

Chtěl bych rozšířit mysqli třída:

class mysqliA extends mysqli{
    function escape_string($data){
        if(!is_array($data)) {
            if(!get_magic_quotes_gpc()) {
                $data = $this->escape_string($data);
                return $data;
            }
        } else {
            return $this->escape_string($data);
        }
    }
}

že způsob, stačí zavolat

$db = new mysqliA();
$db->escape_string($data);
Odpovězeno 26/08/2009 v 22:46
zdroj uživatelem

hlasů
0

Vytvořit veřejnou funkci v souboru db třídy

function escape($string)
    {
        return $this->connection->real_escape_string($string);

    }

a můžete jej použít jako toto

function safe()

    {
            $id=$this->mysqli->escape($this->id);

            $status=$this->mysqli->escape($this->status);

            $shortcode=$this->mysqli->escape($this->shortcode);



     }

Použití funkce závisí na tom, jak budete používat

Odpovězeno 17/02/2015 v 14:00
zdroj uživatelem

hlasů
0

kdybych rozšířit třídu I získat:

Notice: Undefined variable: db in *file path* on line 22

Fatal error: Call to a member function escape_string() on a non-object in *file path* on line 22

potrubí 22 je, pokud je tato funkce

Kdybych předat mysqli objekt dostanu:

Warning: Missing argument 2 for safe() in *file path* on line 17

Notice: Undefined variable: db in *file path* on line 22

Fatal error: Call to a member function escape_string() on a non-object in *file path* on line 22

Moje volání funkce:

                    $item[$form] = safe($item[$form],$db);

tak jasně, no chybí druhý var

A nemohu postavit třídu kolem funkci a inicializovat nové mysqli připojení (což se zdá jako vrchol neefektivnosti v každém případě) becuase musím udělat trezor () statickou funkci, aby byl platný pro callback array_map () a žádná syntax zdá se, pracuje pro tento řádek:

$data = $this->db->escape_string($data);

Zkusil

$data = $this->db->escape_string($data);
$data = self::db::escape_string($data);
$data = self::db->escape_string($data);
Odpovězeno 27/08/2009 v 22:48
zdroj uživatelem

hlasů
0

Nechci vás povzbudit k použití globals, ale pokud byste chtěli, aby přístup $dbz bezpečnou funkci budete muset dát global $db;na začátku funkce.

Což má za následek:

$db = new mysqli($host,$user,$password,$database_name);

function safe ($data) {

  global $db;

  if(!is_array($data)) {
     if(!get_magic_quotes_gpc()) {
       $data = $db->escape_string($data);
       return $data;
    }
  } else {
    return array_map('safe',$data);
  }
}

Upozorňujeme, že globals jsou považovány za zlo a neměly by být používány.

Co byste měli používat dál? No, pro použití věci vzor registru (mějte na paměti, že na pozdější dobu) asi by byl nejvhodnější. Ale které vám pomohou začít s objektově orientovaného programování, měli byste vyzkoušet následující teď:

class myClass {

    protected $db;

    public function __construct() {
        $this->db = new mysqli($host,$user,$password,$database_name);
    }


    function safe ($data) {

      if(!is_array($data)) {
         if(!get_magic_quotes_gpc()) {
           $data = $this->db->escape_string($data);
           return $data;
        }
      } else {
        return array_map('safe',$data);
      }
    }
}

Žádám vás, abyste si přečíst více o objektově orientovaného programování, protože vám pomůže psát lepší a opakovaně použitelný kód.

Doufají, že jsem mohl pomoci.

Odpovězeno 26/08/2009 v 23:52
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more