【发布时间】:2011-12-17 17:49:59
【问题描述】:
我正在使用 symfony 1.4.10,并尝试在 MySQL 表中执行相当复杂的 INSERT。我正在使用 MySQL 的几何函数以一种可以轻松进行邻近搜索的形式存储一组纬度、经度坐标(这只是背景,不太相关)。
这是我想在原始 SQL 中执行的操作:
INSERT INTO video_geo (vimeo_vid, coord)
VALUES ( 15702113, GeomFromText( 'POINT(-122.415 37.7792)' ));
更新:我很确定问题是与 POINT 的参数“不匹配”。 POINT 需要两个“参数”,纬度和经度,但它是数据库中的一列。不确定如何对其应用准备好的语句(多少个问号以及给它什么,一个字符串?)
我正在尝试对 Doctrine 使用“原始查询”,但我找不到太多关于它的详细文档(只有非常基本的示例,很难从中推断出)。
这是我最近的试错尝试:
<?php
$connection = Doctrine_Manager::connection();
$query = "INSERT INTO video_geo (vimeo_vid, coord) VALUES( ? , GeomFromText( 'POINT( ? ? )' ));";
$statement = $connection->prepare($query);
$statement->bindValue(1, $vimeoID);
$statement->bindValue(2, $lat);
$statement->bindValue(3, $lon);
$statement->execute();
?>
这会导致以下错误:
在科幻日志中:
10 月 28 日 22:58:14 symfony [info] {Doctrine_Connection_Statement} 执行:INSERT INTO video_geo (vimeo_vid, coord) VALUES( ?, GeomFromText( 'POINT( ? ? )' )); - ()
异常转储:
Doctrine_Connection_Mysql_Exception' 带有消息 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' in...
我认为问题在于 POINT...我应该传递一个参数吗?我不确定是什么类型。
symfony 手册中的示例没有显示如何执行准备好的语句,我认为这就是我要在这里寻找的信息。
任何帮助表示赞赏!谢谢...
彼得
【问题讨论】:
-
谢谢,这很有帮助。实际上,我在原始帖子中做了一些更新(我使用的是 Propel 语法而不是教义)。进步,但我仍然遇到错误。我会查看链接,但我上面的语法似乎是正确的,它只是 POINT 'type' 可能导致问题......这是一个准备好的参数(字符串类型?),两个?
-
你知道the Geographical behavior的存在吗?