Я вижу две проблемы. Во-первых, функция GeomFromText принимает строку, поэтому она должна выглядеть как GeomFromText('POLYGON((0, 1, 2))')
(обратите внимание на кавычки). Во-вторых, поскольку текст POLYGON...
является строковым литералом, его следует заменить подстановочным знаком, а не отдельными частями. Ваш запрос должен выглядеть так:
INSERT INTO areas (name, polygon)
VALUES (?, GeomFromText(?))
Затем вы должны построить строку POLYGON((?, ?, ?, ?, ?, ?))
в приложении, а не в операторе. Поскольку PHP имеет безопасную обработку строк, я бы рекомендовал использовать sprintf('POLYGON((%d, %d, %d, %d, %d, %d))', $var1, $var2, $var3, $var4, $var5, $var6)
(sprintf опасен в C).
В качестве альтернативы, вы можете использовать пространственные функции MySQL для генерации точек. Я думаю, это то, что вы пытались сделать, но вы не пропускаете их через GeomFromText. Чтобы построить многоугольник с пространственными функциями MySQL, документация предполагает, что вам нужно будет сделать:
INSERT INTO areas (name, polygon)
VALUES (?, Polygon(LineString(Point(?, ?), Point(?, ?), Point(?, ?))))
До MySQL 5.1.35 вам нужно было бы сделать:
INSERT INTO areas (name, polygon)
VALUES (?, GeomFromWKB(Polygon(LineString(Point(?, ?), Point(?, ?), Point(?, ?)))))