我在使用 PHP PDO 库和准备好的语句时遇到了一些小问题。据我所知,下面的准备好的语句应该有效,但事实并非如此,而是我得到:“PDOStatement::execute(): SQLSTATE[HY093]: 无效的参数编号:绑定变量的数量与标记的数量不匹配” 。
我的本节 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() 中包含的文本有任何问题。我四处寻找解决方案,今晚花了几个小时修改代码,但无济于事。
我什至尝试过这两个堆栈溢出主题中的建议,但它们也不起作用:
- PDO 准备语句上的参数编号无效 https://stackoverflow.com/questions/2105015/invalid-parameter-number-on-pdo-prepared-statement
- PHP PDO 准备好的语句 https://stackoverflow.com/questions/1457131/php-pdo-prepared-statements
任何帮助将非常感激...