Запрос PHP PDO не вставляется - Ошибка HY093 - PullRequest
0 голосов
/ 09 октября 2018

После долгих поисков в Интернете, когда я вижу эту ошибку, она выглядит действительно в зависимости от сценария.Пока что я не нашел тот, который соответствовал бы моему сценарию.Я думаю, что моя проблема связана с подготовленным оператором с параметрами типа пространственных данных.

Способ выполнения моего кода:

$sql = $conn->prepare("INSERT INTO states(`name`, `poly`) VALUES(':name',GeomFromText('GEOMETRYCOLLECTION(:coords)'));");
$res = $sql->execute(['name'=>$name, 'coords'=>$coords]);

if($res){
    echo "... Successfully Inserted<br><br>";
}
else{
    echo "... Failed<br><br>";
    print_r($sql->errorInfo());
    echo "<br><br>";
}

Вышеприведенный сбой.Подключение к базе данных было проверено.Поскольку это довольно большие наборы геометрии, вместо вставки моего кода я покажу, как я проверял свой SQL:

Дампинг исходного файла SQL и копирование / вставка SQL в окно phpMyAdmin, все вставляется просто отлично.

$sqlStr = "INSERT INTO states(`name`, `poly`) VALUES('$name',GeomFromText('GEOMETRYCOLLECTION($coords)'));";
$check = file_put_contents('./states/'.$name.'2.sql', $sqlStr);

Так что из-за этого я считаю, что мой sql правильный, но моя проблема, вероятно, из-за части подготовки / выполнения.Я не уверен, что типы пространственных данных не могут быть назначены таким образом?

Edit

Я также хочу отметить, что я нахожусь на PHP версии 5.5.9, и я выполнил запросыв оригинальном методе с параметрами в параметре execute просто отлично.

1 Ответ

0 голосов
/ 09 октября 2018

Нет никакого способа, которым код в конце мог бы работать.Параметры в запросе не должны быть заключены в кавычки.

Поскольку GEOMETRYCOLLECTION(:coords) должно быть в строке, вам нужно использовать CONCAT() для создания этой строки.

$sql = $conn->prepare("
    INSERT INTO states(`name`, `poly`) 
    VALUES(:name,GeomFromText(CONCAT('GEOMETRYCOLLECTION(', :coords, ')')));");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...