У меня небольшая проблема с библиотекой 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; }
Я сделал var_dump $ polygon-> getUserId (), $ polygon-> getPolygonAsText () и $ polygon-> getPolygonType () и получил следующее:
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, а PolygonFromText (\ POLYGON ((: polygonArea)) \ ') из оператора SQL заставляет запрос работать.
Теперь я полностью в растерянности. Кто-нибудь знает, что здесь не так? Я не вижу ничего плохого в тексте, содержащемся в $ polygon-> getPolygonAsText (). Я искал высоко и низко для решения этого и провел несколько часов этим вечером, переделывая код, но безрезультатно.
Я даже попробовал предложения в этих двух потоках переполнения стека, но они тоже не работали:
Любая помощь приветствуется…