Skip to content

Commit 251be93

Browse files
staabmclxmstaab
andauthored
refactoring: separated mysqli-escape tests (#39)
Co-authored-by: Markus Staab <[email protected]>
1 parent 960490c commit 251be93

File tree

3 files changed

+59
-49
lines changed

3 files changed

+59
-49
lines changed

tests/DbaInferenceTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public function dataFileAsserts(): iterable
2525
yield from $this->gatherAssertTypes(__DIR__.'/data/pdo-fetch-types.php');
2626

2727
yield from $this->gatherAssertTypes(__DIR__.'/data/mysqli.php');
28+
yield from $this->gatherAssertTypes(__DIR__.'/data/mysqli-escape.php');
2829

2930
// make sure class definitions within the test files are known to reflection
3031
require_once __DIR__.'/data/runMysqlQuery.php';

tests/data/mysqli-escape.php

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
3+
namespace MysqliEscapeTest;
4+
5+
use mysqli;
6+
use function PHPStan\Testing\assertType;
7+
8+
class Foo
9+
{
10+
/**
11+
* @param numeric $n
12+
* @param non-empty-string $nonE
13+
* @param numeric-string $numericString
14+
*/
15+
public function escape(mysqli $mysqli, int $i, float $f, $n, string $s, $nonE, string $numericString)
16+
{
17+
assertType('numeric-string', mysqli_real_escape_string($mysqli, (string) $i));
18+
assertType('numeric-string', mysqli_real_escape_string($mysqli, (string) $f));
19+
assertType('numeric-string', mysqli_real_escape_string($mysqli, (string) $n));
20+
assertType('numeric-string', mysqli_real_escape_string($mysqli, $numericString));
21+
assertType('non-empty-string', mysqli_real_escape_string($mysqli, $nonE));
22+
assertType('string', mysqli_real_escape_string($mysqli, $s));
23+
24+
assertType('numeric-string', $mysqli->real_escape_string((string) $i));
25+
assertType('numeric-string', $mysqli->real_escape_string((string) $f));
26+
assertType('numeric-string', $mysqli->real_escape_string((string) $n));
27+
assertType('numeric-string', $mysqli->real_escape_string($numericString));
28+
assertType('non-empty-string', $mysqli->real_escape_string($nonE));
29+
assertType('string', $mysqli->real_escape_string($s));
30+
}
31+
32+
/**
33+
* @param numeric $n
34+
* @param non-empty-string $nonE
35+
* @param numeric-string $numericString
36+
*/
37+
public function quotedArguments(mysqli $mysqli, int $i, float $f, $n, string $s, $nonE, string $numericString)
38+
{
39+
$result = $mysqli->query('SELECT email, adaid FROM ada WHERE adaid='.$mysqli->real_escape_string((string) $i));
40+
assertType('mysqli_result<array{email: string, adaid: int<0, 4294967295>}>|false', $result);
41+
42+
$result = $mysqli->query('SELECT email, adaid FROM ada WHERE adaid='.$mysqli->real_escape_string((string) $f));
43+
assertType('mysqli_result<array{email: string, adaid: int<0, 4294967295>}>|false', $result);
44+
45+
$result = $mysqli->query('SELECT email, adaid FROM ada WHERE adaid='.$mysqli->real_escape_string((string) $n));
46+
assertType('mysqli_result<array{email: string, adaid: int<0, 4294967295>}>|false', $result);
47+
48+
$result = $mysqli->query('SELECT email, adaid FROM ada WHERE adaid='.$mysqli->real_escape_string($numericString));
49+
assertType('mysqli_result<array{email: string, adaid: int<0, 4294967295>}>|false', $result);
50+
51+
// when quote() cannot return a numeric-string, we can't infer the precise result-type
52+
$result = $mysqli->query('SELECT email, adaid FROM ada WHERE adaid='.$mysqli->real_escape_string($s));
53+
assertType('bool|mysqli_result', $result);
54+
55+
$result = $mysqli->query('SELECT email, adaid FROM ada WHERE adaid='.$mysqli->real_escape_string($nonE));
56+
assertType('bool|mysqli_result', $result);
57+
}
58+
}

tests/data/mysqli.php

Lines changed: 0 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -48,53 +48,4 @@ public function fnQuery(mysqli $mysqli, string $query)
4848
$result = mysqli_query($mysqli, $query);
4949
assertType('bool|mysqli_result', $result);
5050
}
51-
52-
/**
53-
* @param numeric $n
54-
* @param non-empty-string $nonE
55-
* @param numeric-string $numericString
56-
*/
57-
public function escape(mysqli $mysqli, int $i, float $f, $n, string $s, $nonE, string $numericString)
58-
{
59-
assertType('numeric-string', mysqli_real_escape_string($mysqli, (string) $i));
60-
assertType('numeric-string', mysqli_real_escape_string($mysqli, (string) $f));
61-
assertType('numeric-string', mysqli_real_escape_string($mysqli, (string) $n));
62-
assertType('numeric-string', mysqli_real_escape_string($mysqli, $numericString));
63-
assertType('non-empty-string', mysqli_real_escape_string($mysqli, $nonE));
64-
assertType('string', mysqli_real_escape_string($mysqli, $s));
65-
66-
assertType('numeric-string', $mysqli->real_escape_string((string) $i));
67-
assertType('numeric-string', $mysqli->real_escape_string((string) $f));
68-
assertType('numeric-string', $mysqli->real_escape_string((string) $n));
69-
assertType('numeric-string', $mysqli->real_escape_string($numericString));
70-
assertType('non-empty-string', $mysqli->real_escape_string($nonE));
71-
assertType('string', $mysqli->real_escape_string($s));
72-
}
73-
74-
/**
75-
* @param numeric $n
76-
* @param non-empty-string $nonE
77-
* @param numeric-string $numericString
78-
*/
79-
public function quotedArguments(mysqli $mysqli, int $i, float $f, $n, string $s, $nonE, string $numericString)
80-
{
81-
$result = $mysqli->query('SELECT email, adaid FROM ada WHERE adaid='.$mysqli->real_escape_string((string) $i));
82-
assertType('mysqli_result<array{email: string, adaid: int<0, 4294967295>}>|false', $result);
83-
84-
$result = $mysqli->query('SELECT email, adaid FROM ada WHERE adaid='.$mysqli->real_escape_string((string) $f));
85-
assertType('mysqli_result<array{email: string, adaid: int<0, 4294967295>}>|false', $result);
86-
87-
$result = $mysqli->query('SELECT email, adaid FROM ada WHERE adaid='.$mysqli->real_escape_string((string) $n));
88-
assertType('mysqli_result<array{email: string, adaid: int<0, 4294967295>}>|false', $result);
89-
90-
$result = $mysqli->query('SELECT email, adaid FROM ada WHERE adaid='.$mysqli->real_escape_string($numericString));
91-
assertType('mysqli_result<array{email: string, adaid: int<0, 4294967295>}>|false', $result);
92-
93-
// when quote() cannot return a numeric-string, we can't infer the precise result-type
94-
$result = $mysqli->query('SELECT email, adaid FROM ada WHERE adaid='.$mysqli->real_escape_string($s));
95-
assertType('bool|mysqli_result', $result);
96-
97-
$result = $mysqli->query('SELECT email, adaid FROM ada WHERE adaid='.$mysqli->real_escape_string($nonE));
98-
assertType('bool|mysqli_result', $result);
99-
}
10051
}

0 commit comments

Comments
 (0)