PHP PDO查询未插入-错误HY093

PHP PDO查询未插入-错误HY093,php,mysql,pdo,Php,Mysql,Pdo,在网上搜索了很多次之后,当我看到这个错误时,它看起来确实是特定于场景的。到目前为止,我还没有找到一个符合我的设想。我认为我的问题来自一个准备好的语句,其中包含空间数据类型params 我执行代码的方式是: $sql = $conn->prepare("INSERT INTO states(`name`, `poly`) VALUES(':name',GeomFromText('GEOMETRYCOLLECTION(:coords)'));"); $res = $sql->execut

在网上搜索了很多次之后,当我看到这个错误时,它看起来确实是特定于场景的。到目前为止,我还没有找到一个符合我的设想。我认为我的问题来自一个准备好的语句,其中包含空间数据类型params

我执行代码的方式是:

$sql = $conn->prepare("INSERT INTO states(`name`, `poly`) VALUES(':name',GeomFromText('GEOMETRYCOLLECTION(:coords)'));");
$res = $sql->execute(['name'=>$name, 'coords'=>$coords]);

if($res){
    echo "... Successfully Inserted<br><br>";
}
else{
    echo "... Failed<br><br>";
    print_r($sql->errorInfo());
    echo "<br><br>";
}
正因为如此,我相信我的sql是正确的,但我的问题可能是由于准备/执行部分。我不确定空间数据类型是否不能这样分配

编辑
我还想指出的是,我使用的是PHP 5.5.9版,我用原始方法执行了查询,执行中的参数很好。

最后的代码不可能正常工作。查询中的参数不能放在引号内

$sqlStr = "INSERT INTO states(`name`, `poly`) VALUES('$name',GeomFromText('GEOMETRYCOLLECTION($coords)'));";
$check = file_put_contents('./states/'.$name.'2.sql', $sqlStr);
由于
GEOMETRYCOLLECTION(:coords)
必须位于字符串中,因此需要使用
CONCAT()
创建此字符串

$sql = $conn->prepare("
    INSERT INTO states(`name`, `poly`) 
    VALUES(:name,GeomFromText(CONCAT('GEOMETRYCOLLECTION(', :coords, ')')));");

你能试试
$sql->bind_参数(“ss”、$name、$coords)$sql->execute()你的php版本是什么?当您使用绑定参数时,方括号快捷方式仅在php 5.4+中可用-您不需要在
':name'
中加引号,而应该是
:name
。不过,我不确定第二部分是如何使用引号的。绑定参数是有效的,但我仍然不确定为什么原始方法不起作用。我也编辑了这个问题来说明这一点。我还注意到它是PHPV5.5.9,我以前用这个方法执行过查询。我猜是几何体对象真的以某种方式抛出了它。@这是mysqli语法,而不是PDO。这就成功了。我的问题是,为什么我需要对geom部分进行concat?我相信executewithparams本质上是在幕后执行的?
GeomFromText
要求其参数为字符串。您需要将固定字符串
GEOMETRYCOLLECTION
与参数连接起来以获得新字符串。您认为错误。PDO永远不会替换引号内的参数。无论是使用
bindParam
还是将参数放入
execute()
参数中,都没有关系。