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() に含まれるテキストに問題はありません。私はこれに対する解決策を高低で検索し、今晩コードをいじって数時間を費やしましたが、役に立ちませんでした。
これら 2 つのスタック オーバーフロー トピックの提案も試しましたが、どちらも機能しませんでした。
どんな助けでも大歓迎です...