ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
190
190
EMPFEHLEN
-
Hallo,
wegen prepared statement habe ich folgenden Code gefunden.
Aberr folgende Funktionen verstehe ich nicht, was diese machen:
PHP-Code: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;
}
Wenn ich nen Query absetzen will mache ich das dann immer so:PHP-Code: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;
}
Hab das ganze aus nen CMSPHP-Code:$this->prepared("UPDATE tabelle SET id=? WHERE user=?")->execute(8,'Kalito');
Ich bin keine Signatur! - Auch wenn`s so aussieht :) - Wirklich!
Über ein Danke freut sich jeder
-
14.01.12 11:59 #2
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.521
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.Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
Ähnliche Themen
-
Verstehe fremden Code nicht - muss ihn aber ändern (Datenspeicherung in MySQL DB)
Von suntrop im Forum PHPAntworten: 4Letzter Beitrag: 19.08.10, 20:20 -
Ich verstehe es nicht...
Von MsvP@habdichliebhasi im Forum CSSAntworten: 10Letzter Beitrag: 02.11.07, 18:48 -
Einsteinrätzel lösungsansatz - verstehe den Code nicht
Von StressMaker im Forum CGI, Perl, Python, Ruby, Power ShellAntworten: 3Letzter Beitrag: 28.11.04, 17:48 -
GOOGLE addurl usw. Verstehe nicht warum meine seite nicht aufgenommen wird.
Von liquidbeats im Forum HTML & XHTMLAntworten: 8Letzter Beitrag: 06.06.04, 12:49 -
Ich verstehe PHP nicht!
Von Fbiede im Forum PHPAntworten: 19Letzter Beitrag: 17.07.02, 21:12





Zitieren


Login






[PHP][Snippet] Array zu XML konvertieren