Intereting Posts
php-число с плавающей запятой, показанное в экспоненциальной форме Соединение APNS Openssl с PHP для уведомления Apple Push? Запуск нескольких запросов в MySQL без использования подзапроса Использование mod_rewrite для преобразования путей с хэш-символами в строки запроса Как отсылать все содержимое файла .html в php? Неустранимая ошибка: нельзя использовать объект типа mysqli_result как массив в /home/william/public_html/forums/index.php в строке 228 как проверить php-адрес электронной почты с помощью WAMP Произошла ошибка клиента: Не удалось создать каталог хранения: / tmp / Google_Client / 00 Ссылка на извлечение PHP из тега <a> Использование условных значений из массива в выражении if … Как получить значение гендерного переключателя (мужчины, женщины) с CodeIgniter? У меня есть форма, в которой, если пользователь вводит ввод, он должен проверять наличие отрицательного или пустого поля ввода и выдавать предупреждающее сообщение Соединение Heroku Postgres из приложения localhost PHP Случайное число в диапазоне с использованием PHP Laravel получить заголовки запроса

Как предотвратить предотвращение утечки CakePHP на данные?

Я работаю над PostGIS над приложением CakePHP.

Поскольку я работал с некоторыми функциями базы данных, я сделал вызовы raw $this->query() для вставки данных. Я нахожусь в точке, где мне нужно получить идентификатор результата запроса на вставку, но $this->query() возвращает пустой массив.

Вот запрос, который я использую для вставок:

 INSERT INTO locations (title,company_id,state_id,poly,point) VALUES ('$title',$company_id,$state_id,ST_GeomFromText('$geom',4269),$point); 

Проблема заключается в том, что Cake пытается вставить 'ST_GeomFromText('$geom',4269)' в качестве строки, и я не могу понять, как заставить ее удалить кавычки в инструкции SQL insert, которую он готовит через $this->Location->save(); ,

Какие-либо предложения?

Редактировать:

Раньше я делал $this->query(); и мой SQL работает отлично. Это не проблема.

Теперь, когда я это делаю:

 $this->Location->create(); $this->Location->set('poly',$poly); ... Set all the rest of the model fields ... $this->Location->save(); 

SQL, который создается, выглядит следующим образом:

 INSERT INTO locations (title,company_id,state_id,poly,point) VALUES ('Some Title',5,23,'ST_GeomFromText('$geom',4269)',POINT(-72.342,102.23455); 

Поскольку ST_GeomFromText получает 'quoted', PostgreSQL выдает ошибку и не вставляет геометрию.

Решение моей проблемы оказалось НЕ ТОЛЬКО на основе CakePHP, но PostgreSQL!

Добавив «RETURNING id» к запросу, например:

 INSERT INTO locations (title,company_id,state_id,poly,point) VALUES ('$title',$company_id,$state_id,ST_GeomFromText('$geom',4269),$point) RETURNING id; 

Запрос больше не возвращает пустой массив и теперь возвращает идентификатор только что созданной строки!

Через $this->ModelName->getLastInsertID(); вы можете получить последний вставленный идентификатор. Итак, после сохранения вы можете вызвать этот код, чтобы получить его идентификатор.