42601 [1-6ren">
gpt4 book ai didi

php - PDO 语句错误 : 42601 syntax error near "$6"

转载 作者:可可西里 更新时间:2023-11-01 00:25:52 24 4
gpt4 key购买 nike

我无法执行这个简单的查询。我正在使用无名参数化查询和 Postgres + PostGIS。 PDO Statements报错信息如下:

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);。来自 $dbh 的 errorInfo 给出代码 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 数组 传递给它。 $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

因此,在尝试了一些事情之后(分别循环和绑定(bind)参数,将 $params 中的 int(8) 更改为字符串等)。我将 sql 复制并粘贴到终端中以运行查询。我非常小心地按照 $params 的确切顺序替换了所有变量,它运行良好。

我的结论是第六个变量(整数)没有正确插入。知道为什么会这样吗?

希望这种错误不是重复问题。我完成了 3 页的问题。

最佳答案

您可以使用查询参数来替代文字值,但不能替代表名、列名、值列表、表达式、SQL 关键字等。

这样想:在准备 时,SQL 解析器必须知道您的查询使用的所有语法,以及您正在使用的表和列。否则它怎么知道那些表和列存在于你的数据库中,或者它是否应该给你一个错误?它应该在准备时而不是在执行时为您提供与不存在的表相关的任何错误。

因此,当您为第 6 个参数值提供字符串“myTable”时,就好像您执行了一个查询:

SELECT ... FROM 'myTable' ...

也就是说,它不是表名,而是带引号的字符串文字。这在 SQL 中没有任何意义;这是语法和语义错误。

关于php - PDO 语句错误 : 42601 syntax error near "$6",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6950193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com