繁体   English   中英

PDO语句错误:“$ 6”附近的语法错误42601

[英]PDO Statement Error: 42601 syntax error near “$6”

我无法让这个简单的查询执行。 我正在使用无名参数化查询和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); 来自$ 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 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

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

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

希望这种错误不是一个重复的问题。 我经历了3页的问题。

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

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

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

SELECT ... FROM 'myTable' ...

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

我不完全确定,但我不认为你可以参数化表名,我甚至不确定你是否可以用于列,但我还没有测试过它。

另外,不确定?.column工作原理。 我不认为它只是用字符串替换参数。

MSSQL,PDO,插入 XML 字符串时出错:一般错误:102 ' 附近的语法不正确<!--?xml version=“1.0”</div--><div id="text_translate"><p> 我正在尝试将 XML 字符串从 PHP 插入 MSSQL 数据库。 我得到:</p><blockquote><p> SQLSTATE[HY000]:一般错误:102 ' 附近的语法不正确(后面是 xml 的块)。</p></blockquote><p> 准备好的语句是:</p><pre> $stmt = $this-&gt;db-&gt;prepare(' INSERT INTO [System_XmlExchangeImport] ([Create_ID], [ImportCode], [InputXml]) VALUES (?, ?, ?); '); $result = $stmt-&gt;execute(array('ABCDEFGHKAJSDKLJ', $code, $xml));</pre><p> $xml是一个有效的 XML 字符串。 可以使用 SQL 客户端应用程序(sqlectron)中的相同语句插入相同的 XML</p><p> 我不知道下一步该做什么。</p></div>

[英]MSSQL, PDO, error when inserting XML string: General error: 102 Incorrect syntax near '<?xml version=“1.0”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM