Skip to content

Commit bd43117

Browse files
committed
Database: SqlPreprocessor ignores placeholders in comments [Closes nette/nette#1293]
1 parent 56d568b commit bd43117

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

src/Database/SqlPreprocessor.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public function process($params)
7979
} else {
8080
$res[] = Nette\Utils\Strings::replace(
8181
$param,
82-
'~\'.*?\'|".*?"|\?|\b(?:INSERT|REPLACE|UPDATE|WHERE|HAVING|ORDER BY|GROUP BY)\b~si',
82+
'~\'.*?\'|".*?"|\?|\b(?:INSERT|REPLACE|UPDATE|WHERE|HAVING|ORDER BY|GROUP BY)\b|/\*.*?\*/|--[^\n]*~si',
8383
array($this, 'callback')
8484
);
8585
}
@@ -93,7 +93,7 @@ public function process($params)
9393
public function callback($m)
9494
{
9595
$m = $m[0];
96-
if ($m[0] === "'" || $m[0] === '"') { // string
96+
if ($m[0] === "'" || $m[0] === '"' || $m[0] === '/' || $m[0] === '-') { // string or comment
9797
return $m;
9898

9999
} elseif ($m === '?') { // placeholder

tests/Database/SqlPreprocessor.phpt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,28 @@ test(function() use ($preprocessor) {
5757
});
5858

5959

60+
test(function() use ($preprocessor) { // comments
61+
list($sql, $params) = $preprocessor->process(array("SELECT id --?\nFROM author WHERE id = ?", 11));
62+
Assert::same( "SELECT id --?\nFROM author WHERE id = 11", $sql );
63+
Assert::same( array(), $params );
64+
65+
list($sql, $params) = $preprocessor->process(array("SELECT id /* ? \n */FROM author WHERE id = ? --*/", 11));
66+
Assert::same( "SELECT id /* ? \n */FROM author WHERE id = 11 --*/", $sql );
67+
Assert::same( array(), $params );
68+
});
69+
70+
71+
test(function() use ($preprocessor) { // strings
72+
list($sql, $params) = $preprocessor->process(array("SELECT id, '?' FROM author WHERE id = ?", 11));
73+
Assert::same( "SELECT id, '?' FROM author WHERE id = 11", $sql );
74+
Assert::same( array(), $params );
75+
76+
list($sql, $params) = $preprocessor->process(array('SELECT id, "?" FROM author WHERE id = ?', 11));
77+
Assert::same( 'SELECT id, "?" FROM author WHERE id = 11', $sql );
78+
Assert::same( array(), $params );
79+
});
80+
81+
6082
test(function() use ($preprocessor) { // where
6183
list($sql, $params) = $preprocessor->process(array('SELECT id FROM author WHERE', array(
6284
'id' => NULL,

0 commit comments

Comments
 (0)