Heim > php教程 > PHP开发 > Hauptteil

Nutzung der OOP-Funktionen von PHP zur Erreichung des Datenschutzes (2)

黄舟
Freigeben: 2016-12-21 10:59:40
Original
1082 Leute haben es durchsucht

Funktion „prepare“

Um die Vorlage in Beispiel 1 zu verwenden, müssen Sie zunächst die Funktion „prepare()“ konstruieren. Um sicherzustellen, dass nicht in Anführungszeichen gesetzte Zeichen versehentlich als Platzhalter geparst werden, sollte die Funktion entfernt werden alle Zeichenfolgen aus der Abfrage und speichern sie vorübergehend in einem Array. Auch der String selbst wird durch Platzhalter ersetzt, die üblicherweise als String-Sequenzen erkannt werden, die nicht in der SQL-Anweisung vorkommen sollen. Während der Kompilierung der Abfrage wird zunächst der Prozedurplatzhalter ersetzt und dann die Zeichenfolge wieder in die Abfrage eingefügt. Dies erfolgt über die Funktion preg_replace() und eine weitere Hilfs-Callback-Funktion, die als preg_replace()-Funktion verwendet wird.

Beispiel 2: Prepare()-Funktion

/**
* 把query准备为一个存储过程。
* @param string $query Prepared query text
* @return void
*/
public function prepare($query)
{
 $this->stored_procedure = true;
 $this->quote_store = array(); //清除引号
 $this->query = preg_replace(self::$QUOTE_MATCH, '$this->sql_quote_replace("1"?"1":'2')', $query);
}

private function sql_quote_replace($match)
{
 $number = count($this->query_strings);
 $this->query_strings[] = $match;
 return "$||$$number";
}
Nach dem Login kopieren

Beachten Sie hier die Verwendung des statischen QUOTE_MATCH-Attributs private sowie des quote_store-Attributs und der sql_quote_replace()-Funktion. Im Vergleich zu protected stellt die Definition als privat sicher, dass jede Unterklasse, die die Prepare()-Methode der Abfrageklasse überschreibt, ihren eigenen Mechanismus zum Entfernen von Anführungszeichen verwendet.

Funktion „compilieren“

Der nächste Schritt besteht darin, die Funktionen „compile()“ und „execute()“ zu erstellen.

Die Funktion „compile()“ ist wie in Beispiel 3 gezeigt und ihre Funktion ist wie folgt:

· Sie akzeptiert eine variable Anzahl von Parametern (d. h. variable Parameter), die mit den Platzhaltern übereinstimmen in der Abfrage.

· Überprüfen Sie, ob der Platzhalter den richtigen Datentyp hat und ersetzen Sie ihn durch den Wert im Parameter.

 ·Die Abfrage als Zeichenfolge zurückgeben, aber nicht ausführen.

 ·Wenn das Abfrageobjekt nicht als gespeicherte Prozedur mit der Funktion Prepare() initialisiert wird, wird eine Ausnahme ausgelöst.

Beispiel 3: Funktion „compile()“

/**
* 返回编译的query,但并不执行它。
* @param mixed $args,... Query Parameters
* @return string Compiled Query
*/
public function compile($params)
{
 if (! $this->stored_procedure) {
  throw new Exception("存储过程未被初始化!");
 }

 /* 替代参数 */
 $params = func_get_args(); // 取得函数参数
 $query = preg_replace("/(?query);

 return $this->add_strings($query); //把字符串放回query中
}

/**
* 重新插入被prepare()函数移除的字符串。
*/
private function add_strings($string)
{
 $numbers = array_keys($this->query_strings);
 $count = count($numbers);
 $searches = array();
 for($x = 0; $x < $count; $x++) {
  $searches[$x] = "$||${$numbers[$x]}";
 }

 return str_replace($searches, $this->query_strings, $string);
}

/**
* 每次执行,存储过程中都有一个占位符被替换。
*/
protected function compile_callback($params, $index, $type)
{
 --$index;

 /* 抛出一个异常 */
 if (! isset($params[$index])) {
  throw new Exception("存储过程未收到所需的参数数目!");
 }

 /* 可以在此添加别的类型,如日期和时间。 */
 switch ($type) {
  case &#39;S&#39;:
   return &#39;"&#39; . $this->db->escape_string($params[$index]) . &#39;"&#39;;
   break;
  case &#39;I&#39;:
   return (int) $params[$index];
   break;
  case &#39;N&#39;:
   return (float) $params[$index];
  default:
   throw new Exception("存储过程中指定的数据类型 &#39;$type&#39; 无法识别。");
 }
}
Nach dem Login kopieren

In der Funktion „compile()“ werden zwei zusätzliche Funktionen verwendet, darunter die Funktion „compile_callback()“, die im Funktionsaufruf „preg_replace()“ verwendet wird Die Rückruffunktion wird jedes Mal ausgeführt, wenn in der Abfrage ein Platzhalter gefunden und durch den an die Kompilierungsfunktion übergebenen Wert ersetzt wird.

Das Obige ist der Inhalt der Verwendung der OOP-Funktionen von PHP zur Erreichung des Datenschutzes (2). Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage