PHP PDO 准备好的语句和值绑定给出无效参数编号错误

2024-01-12

我在使用 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

任何帮助将非常感激...


您是否尝试将整个表达式作为绑定值传递?

$sql = 'INSERT INTO '.POLYGON_TABLE.' (user_id, polygon, polygon_type) VALUES (:userId,  PolygonFromText(:polygonArea), :polygonType)';


$sth = $this->pdo->prepare($sql);
$area = sprintf("POLYGON((%s))", $polygon->getPolygonAsText()); 
$sth->bindValue(':userId', $polygon->getUserId(), \PDO::PARAM_INT);
$sth->bindValue(':polygonArea', $area, \PDO::PARAM_STR);
$sth->bindValue(':polygonType', $polygon->getPolygonType(), \PDO::PARAM_STR);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP PDO 准备好的语句和值绑定给出无效参数编号错误 的相关文章

随机推荐