我对 PHP PDO 库和准备好的语句有一点问题。据我所见,下面的准备好的语句应该可以工作,但它没有,而是我得到:“PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens” .
我本节的 PHP 代码如下所示:
$sql = 'INSERT INTO '.POLYGON_TABLE.' (user_id, polygon, polygon_type) VALUES (:userId, PolygonFromText(\'POLYGON((:polygonArea))\'), :polygonType)';
$sth = $this->pdo->prepare($sql);
$sth->bindValue(':userId', $polygon->getUserId(), \PDO::PARAM_INT);
$sth->bindValue(':polygonArea', $polygon->getPolygonAsText(), \PDO::PARAM_STR);
$sth->bindValue(':polygonType', $polygon->getPolygonType(), \PDO::PARAM_STR);
if($sth->execute()) {
return true;
} else {
return false;
}
我已经完成了 $polygon->getUserId()、$polygon->getPolygonAsText() 和 $polygon->getPolygonType() 的 var_dump 并得到以下信息:
string(1) "1"
string(226) "53.897910476098765 -1.739655277929728, 53.865530797116 -2.080231449804728, 53.67235280490181 -2.006073734960978, 53.68862047002787 -1.621552250585978, 53.89305512284903 -1.539154789648478, 53.897910476098765 -1.739655277929728"
string(7) "commute"
问题在于 $polygon->getPolygonAsText() 注释掉这个特定的 bindValue 调用,并且 SQL 语句中的 PolygonFromText(\'POLYGON((:polygonArea))\') 会导致查询工作。
我现在完全不知所措。有人知道这里有什么问题吗?我看不出 $polygon->getPolygonAsText() 中包含的文本有什么问题。我已经到处寻找解决方案,今晚花了几个小时修补代码,但无济于事。
我什至尝试了这 2 个堆栈溢出主题中的建议,但它们也没有奏效:
任何帮助将非常感激...