contao/test — Issue #1007: Fehler in Database->prepare()
Author: aschempp
Created: 2011-11-29 07:11:07+00:00
State: open
Labels: Defect, framework

Bei einer speziellen Anwendung sind mir heute einige Fehler in der prepare() Funktion der Database Klasse aufgefallen.

Original (2.7.3):

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

Korrigierte Version:

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

Erklärung:
1: Wenn ein Backslash vor dem Anführungzeichen steht, sollte dieses nicht gesplittet werden (-> \\\)
2: Die Regex muss auch Zeilenumbrüche beachten (-> /s)

Aufgefallen ist mir das Problem beim einfügen von Daten in die tl_content, bei der im Feld "text" sehr viel Daten auf mehreren Zeilen waren, welche auch Fragezeichen enthielten. TYPOlight hat diese Fragezeichen dann als Platzhalter interpretiert.

Aus einem noch nicht geklärten Grund wurde dann aber dieses Feld nicht mit Anführungzeichen (' ... ') gesplittet, sondern auch nocht das Komma war enthalten (, ' ... '). Deshalb danach noch folgende Anpassung:

```
if (in_array(substr($v, 0, 1), array("'", ',')))
{
continue;
}
```

(Ich vermute das zweite ist nicht so wirklich verständlich ;-) )

[Download the attachments](http://www.contao.org/tl_files/tickets/1007.zip "Download the attachments of this ticket")
Related issues: #1220

--- _Originally created on September 14th, 2009, at 12:10pm (ID 1007)_