我正在使用symfony 1.4.10,並試圖在MySQL表中執行一個相當複雜的INSERT。我使用MySQL的幾何函數來存儲一組緯度,經度座標,我可以很容易地進行鄰近搜索(這只是背景,並不太相關)。在Symfony 1.4.x中使用Doctrine的複雜插入(mysql幾何點)
這是我想在原始SQL做什麼:
INSERT INTO video_geo (vimeo_vid, coord)
VALUES (15702113, GeomFromText('POINT(-122.415 37.7792)'));
更新:我敢肯定的問題是參數「錯配」與POINT。 POINT需要兩個'params',lat和lon,但它是DB中的一列。不知道如何應用準備好的語句(有多少問號和給它一個字符串?)
我試圖使用「原始查詢」與教義,但我找不到太多詳細它的文件(只有真正的基本例子,很難推斷)。
這是我最新的嘗試和錯誤的嘗試:
<?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();
?>
這將導致以下錯誤:
在SF日誌:
Oct 28 22:58:14 symfony [info] {Doctrine_Connection_Statement} execute : INSERT INTO video_geo (vimeo_vid, coord) VALUES(?, GeomFromText('POINT(? ?)')); -()
異常傾倒:
Doctrine_Connection_Mysql_Exception' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' in...
我在想這個問題是與點...我應該傳遞一個參數?我不確定這是什麼類型。
symfony手冊中的示例沒有顯示如何執行預準備語句,我認爲這是我在這裏查找的信息。
任何幫助表示讚賞! Thx ...
Peter
你看這裏? http://stackoverflow.com/questions/2774947/using-raw-sql-with-doctrine –
謝謝,這是有幫助的。我實際上在原文中做了一些更新(我使用的是Propel語法不是教條)。進度,但我仍然收到錯誤。 我會檢查鏈接,但它似乎像我上面的語法是正確的,它只是POINT'類型',可能導致一個問題......這是一個準備參數(字符串類型?),兩? – PeterG
您是否知道[地理行爲]的存在(http://www.doctrine-project.org/projects/orm/1.2/docs/manual/behaviors%3Acore-behaviors%3Ageographical/en)? – greg0ire