SQL PDO Неправильный синтаксис рядом с «@ P1» - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь использовать LIMIT с PDO SQL.

Мой код такой:

$sql = "SELECT * FROM TblWerte LIMIT :limit1";
$result = $db->prepare($sql);
$result->bindParam(':limit1', $limit1);
$limit1 = 15;
$result->execute();

Но когда я пишу $ result-> execute (); Я продолжаю получать эту ошибку:

PHP Неустранимая ошибка: Uncaught PDOException: SQLSTATE [42000]: [Microsoft] [ODB C Driver 17 для SQL Server] [SQL Server ] Falsche Syntax in der Nähe von "@ P1". in C: ... \ werte. php: 96

Трассировка стека:

0 C: \ ... \ werte. php (96): PDOStatement-> execute ()

1 {main}

вставлено C: \ ... \ werte. php в строке 96

Строка 96 - это «$ result-> execute ();»

Я уже пробовал другое, например, используя bindValue() вместо bindParam(), я пытался напрямую преобразовать значение "limit1" в целое число в bindParam() ...

Решение Мне пришлось использовать TOP вместо LIMIT. Также мне пришлось удалить часть bindParams ().

$sql = "SELECT TOP 15 * FROM TblWerte ORDER BY ID DESC";
$result = $db->prepare($sql);
$result->execute();

1 Ответ

0 голосов
/ 27 мая 2020

Предложение LIMIT не является частью стандарта SQL. Он поддерживается как расширение поставщика для SQL посредством MySQL, PostgreSQL и SQLite. SQL На сервере есть нечто похожее: TOP

$sql = "SELECT top :limit1 * FROM TblWerte";
$result = $db->prepare($sql);
$result->bindParam(':limit1 ', $limit1);
$limit1 = 15;
$result->execute();
...