verstehe den Code nicht

Kalito

Erfahrenes Mitglied
Hallo,

wegen prepared statement habe ich folgenden Code gefunden.
Aberr folgende Funktionen verstehe ich nicht, was diese machen:
PHP:
public function prepare($strQuery)
	{
		if (!strlen($strQuery))
		{
			throw new Exception('Empty query string');
		}

		$this->resResult = NULL;
		$this->strQuery = $this->prepare_query($strQuery);

		// Auto-generate the SET/VALUES subpart
		if (strncasecmp($this->strQuery, 'INSERT', 6) === 0 || strncasecmp($this->strQuery, 'UPDATE', 6) === 0)
		{
			$this->strQuery = str_replace('%s', '%p', $this->strQuery);
		}

		// Replace wildcards
		$arrChunks = preg_split("/('[^']*')/", $this->strQuery, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);

		foreach ($arrChunks as $k=>$v)
		{
			if (substr($v, 0, 1) == "'")
			{
				continue;
			}

			$arrChunks[$k] = str_replace('?', '%s', $v);
		}

		$this->strQuery = trim(implode('', $arrChunks));
		return $this;
	}
PHP:
public function execute()
	{
		$arrParams = func_get_args();

		if (is_array($arrParams[0]))
		{
			$arrParams = array_values($arrParams[0]);
		}

		$this->replaceWildcards($arrParams);
		$strKey = md5($this->strQuery);

		// Try to load the result from cache
		if (isset(self::$arrCache[$strKey]) && !self::$arrCache[$strKey]->isModified)
		{
			return self::$arrCache[$strKey]->reset();
		}

		$objResult = $this->query();

		// Cache the result objects
		if ($objResult instanceof Database_Result)
		{
			self::$arrCache[$strKey] = $objResult;
		}

		return $objResult;
	}

Wenn ich nen Query absetzen will mache ich das dann immer so:
PHP:
$this->prepared("UPDATE tabelle SET id=? WHERE user=?")->execute(8,'Kalito');

Hab das ganze aus nen CMS
 
Was verstehst du denn daran nicht? Die prepare()-Methode nimmt das SQL-Statement auseinander und bereitet es darauf vor, das an die Platzhalter-Stellen die Werte gesetzt werden. Grundsätzlich ist diese prepare()-Methode aber ungenügend, denn ein ordentliches prepare() würde den Typen in der Datenbank berücksichtigen.

Die execute()-Methode fügt evtl. übergebene Werte in die Platzhalter-Stellen ein. Auch hier wird der Datenbank-Spaltentyp nicht berücksichtigt.

Diese Implementierung von Prepared Statements bietet kein einziges der wirklich nützlichen Features von RDBMS-Prepared-Statements an.

Verwende doch lieber Mysqli oder PDO.
 
Was verstehst du denn daran nicht? Die prepare()-Methode nimmt das SQL-Statement auseinander und bereitet es darauf vor, das an die Platzhalter-Stellen die Werte gesetzt werden. Grundsätzlich ist diese prepare()-Methode aber ungenügend, denn ein ordentliches prepare() würde den Typen in der Datenbank berücksichtigen.

Die execute()-Methode fügt evtl. übergebene Werte in die Platzhalter-Stellen ein. Auch hier wird der Datenbank-Spaltentyp nicht berücksichtigt.

Diese Implementierung von Prepared Statements bietet kein einziges der wirklich nützlichen Features von RDBMS-Prepared-Statements an.

Verwende doch lieber Mysqli oder PDO.
Lieber PDO, da ist er unabhängiger vom DBMS und das wird sicher auch eher weiterentwickelt als MySQLi (mMn).

Gruß
 

Neue Beiträge

Zurück