PHP PDOライブラリとプリペアドステートメントに多少の問題があります。 「PDOStatement :: execute():SQLSTATE [HY093]:無効なパラメータ番号:バインドされた変数の数がトークンの数と一致しません」というメッセージが表示されている限り、 。このセクションのPHP PDOプリペアドステートメントとバウンドバインドで無効なパラメータ番号エラーが発生する
私のPHPコードは次のようになります。私は$ polygon-ののvar_dumpを行っている
$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;
}
> 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()に含まれるテキストに間違ったものは見当たりません。私はこの問題を解決するために最高と最低を探し、今晩コードを使って数時間を過ごしましたが、無駄にしませんでした。
私もこれらの2スタックオーバーフローのトピックでの提案を試してみましたが、彼らはどちらか動作しませんでした:
すべてのヘルプははるかに高く評価されるだろう...
「PolygonFromText」とは何ですか? – Starx
Googleそれは、MySQLの地理空間的なものの一部です。 –
'PolygonFromText(\ 'POLYGON(:polygonArea))')'余分な角括弧を削除してみてください。 – Starx