PHP PDO查询未插入-错误HY093
在网上搜索了很多次之后,当我看到这个错误时,它看起来确实是特定于场景的。到目前为止,我还没有找到一个符合我的设想。我认为我的问题来自一个准备好的语句,其中包含空间数据类型params 我执行代码的方式是: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
$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()
参数中,都没有关系。