-
-
Notifications
You must be signed in to change notification settings - Fork 23
Open
Labels
bugSomething isn't workingSomething isn't working
Description
Description
phpstan-dba fails to recognize misspellings of SELECT in common SQL statements. It correctly identifies the misspelling of FROM, so it seems reasonsable to expect it would catch SELCT or SLECT misspellings
Environment:
- OS: Ubuntu 22.04
- PHP: 8.1.2-1ubuntu2.22
- phpstan/phpstan: 1.11.2
- staabm/phpstan-dba: 0.2.85
- Database: MySQL 8.0.40
Test Script (phpstan-dba-bug-report.php)
<?php
// PDO connection
$pdo = new PDO("mysql:host=localhost;dbname=testdb", "user", "pass");
$sqlStatements = [
"SELECT * FROM users", // Valid
"SELCT * FROM users", // Misspelled SELECT
"SLECT * FROM users", // Misspelled SELECT
"SELECT * FORM users", // Misspelled FROM
];
foreach ($sqlStatements as $sql) {
echo "Atttempting SQL: {$sql}\n";
try {
$pdo->query($sql);
echo " Success. At least no exception\n";
} catch (\Exception $e) {
echo " EXCEPTION: {$e->getMessage()}\n";
}
}
Bootstrap File (phpstan-dba-bug-bootstrap.php)
<?php
// Minimal bootstrap file for bug report
use staabm\PHPStanDba\DbSchema\SchemaHasherMysql;
use staabm\PHPStanDba\QueryReflection\RuntimeConfiguration;
use staabm\PHPStanDba\QueryReflection\PdoMysqlQueryReflector;
use staabm\PHPStanDba\QueryReflection\QueryReflection;
use staabm\PHPStanDba\QueryReflection\ReplayAndRecordingQueryReflector;
use staabm\PHPStanDba\QueryReflection\ReflectionCache;
require_once __DIR__ . '/vendor/autoload.php';
$config = new RuntimeConfiguration();
// Database connection
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'testuser', 'testpass');
QueryReflection::setupReflector(
new ReplayAndRecordingQueryReflector(
ReflectionCache::create(__DIR__ . '/.phpstan-dba.cache'),
new PdoMysqlQueryReflector($pdo),
new SchemaHasherMysql($pdo)
),
$config
);
phpstan config (phpstan-bug.neon)
includes:
- vendor/staabm/phpstan-dba/config/dba.neon
parameters:
level: 5
paths:
- phpstan-dba-bug-report.php
bootstrapFiles:
- phpstan-dba-bug-bootstrap.php
Script Output:
04:12 $ php phpstan-dba-bug-report.php
Atttempting SQL: SELECT * FROM users
Success. At least no exception
Atttempting SQL: SELCT * FROM users
EXCEPTION: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELCT * FROM users' at line 1
Atttempting SQL: SLECT * FROM users
EXCEPTION: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SLECT * FROM users' at line 1
Atttempting SQL: SELECT * FORM users
EXCEPTION: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FORM users' at line 1
phpstan output:
04:12 $ ./vendor/bin/phpstan analyze -c phpstan-bug.neon
1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
------ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Line phpstan-dba-bug-report.php
------ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
28 Query error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL/MariaDB server version for the right syntax to use near 'FORM
users LIMIT 0' at line 1 (42000).
------ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[ERROR] Found 1 error
Expected output:
I expected that it would have found three errors instead of just one. It correctly recognized the misspelling of FROM (FORM). But I expected it to generate errors for the misspelling of SELECT as SELCT and SLECT
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working