Hi internals, I just stumbled upon what I consider to be a bug with the PDO pgsql driver. *TL;DR: the driver treats parameters bound with PARAM_INT the same as PARAM_STR.*
Take the following example: ``` $pdo = new PDO('pgsql:host=localhost;port=5432', 'postgres', 'postgres'); $statement = $pdo->prepare(" SELECT ST_AsText( ST_Transform( ST_GeomFromText('POINT(0 0)', 2154), ? ) ) "); $statement->bindValue(1, 4326, PDO::PARAM_INT); $statement->execute(); ``` This fails with the following message: PDOException: SQLSTATE[XX000]: Internal error: 7 ERROR: could not parse > proj string '4326' This is because the pgsql driver seems to treat everything as PARAM_STR, despite being explicitly requested to bind the value as PARAM_INT; the placeholder is therefore replaced with the string '4326' instead of the integer 4326. The problem is, in PostGIS, the ST_Transform() <https://postgis.net/docs/ST_Transform.html> function has different signatures with different behaviours depending on whether the second parameter is an integer or a string. As far as I can see, because of this issue, *there is no way to pass an actual integer to ST_Transform()*, which forces me to use PostgreSQL-specific cast syntax to get the behaviour I need, in a library <https://github.com/brick/geo> I maintain that's supposed to work with any GIS-enabled database. Is there any reason why the pgsql driver doesn't respect PDO::PARAM_STR? I asked this question on StackOverflow <https://stackoverflow.com/q/66625661/759866>, and was pointed to the following bug, which I'm not sure is directly related, but was closed as "not a bug": https://bugs.php.net/bug.php?id=50206 *Should this be requalified as a bug and be fixed?* Thanks in advance for your consideration, — Benjamin