У меня проблемы с выполнением этого простого запроса.Я использую безымянные параметризованные запросы и Postgres + PostGIS.Информация об ошибках операторов PDO выглядит следующим образом:
Array
(
[0] => 42601
[1] => 7
[2] => ERROR: syntax error at or near "$6" at character 28
)
Что является синтаксической ошибкой в PostGreSQL, из-за которой я чувствую себя глупо, что не могу ее найти ...
Вот запрос ввопрос
$sql = "SELECT ?,?,?,?,?
FROM ?
WHERE ST_Distance((SELECT the_geom FROM polyon_table WHERE gid = ? ), ?.the_geom) < 0.1";
Тогда я готовлю это ... $stmt = $dbh->prepare($sql);
.ErrorInfo из $ dbh дает код 00000 (успех).
$params
выглядит следующим образом:
array(8) {
[0]=>
string(4) "area"
[1]=>
string(9) "perimeter"
[2]=>
string(6) "lat"
[3]=>
string(6) "lon"
[4]=>
string(8) "data"
[5]=>
string(10) "myTable"
[6]=>
int(8)
[7]=>
string(10) "myTable"
}
Затем я выполняю и передаю $params array
.$stmt->execute($params)
и я печатаю код ошибки и получаю это:
Array
(
[0] => 42601
[1] => 7
[2] => ERROR: syntax error at or near "$6" at character 28
)
$stmt->debugDumpParams();
выглядит следующим образом:
SQL: [112] SELECT ?,?,?,?,? FROM ? WHERE ST_Distance((SELECT the_geom FROM polygon_table WHERE gid = ? ), ?.the_geom)< 0.1
Params: 8
Key: Position #0:
paramno=0
name=[0] ""
is_param=1
param_type=2
...
// shortened it to save space.... all of them look the same, except 6, which has param type = 1
Key: Position #7:
paramno=7
name=[0] ""
is_param=1
param_type=2
Итак, после нескольких попыток (зацикливание и связываниеиндивидуальные параметры, изменяя int (8) в $params
на строку и т. д.).Я скопировал и вставил sql в терминал, чтобы выполнить запрос.Я заменил все переменные очень аккуратно и в точном порядке $params
, и он работает нормально.
Мой вывод заключается в том, что шестая переменная (целое число) вставляется неправильно.Любые идеи, почему это происходит?
Надеюсь, что такого рода ошибки не повторяют вопрос.Я просмотрел 3 страницы вопросов.