Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“SQL PDO”附近的语法错误@P1";_Sql_Sql Server_Pdo_Syntax Error_Limit - Fatal编程技术网

“SQL PDO”附近的语法错误@P1";

“SQL PDO”附近的语法错误@P1";,sql,sql-server,pdo,syntax-error,limit,Sql,Sql Server,Pdo,Syntax Error,Limit,我尝试在PDO SQL中使用LIMIT 我的代码是: $sql = "SELECT * FROM TblWerte LIMIT :limit1"; $result = $db->prepare($sql); $result->bindParam(':limit1', $limit1); $limit1 = 15; $result->execute(); 但是当我写$result->execute()时;我不断地发现这个错误: PHP致命错误:未捕获PDO异常:SQLSTATE

我尝试在PDO SQL中使用LIMIT

我的代码是:

$sql = "SELECT * FROM TblWerte LIMIT :limit1";
$result = $db->prepare($sql);
$result->bindParam(':limit1', $limit1);
$limit1 = 15;
$result->execute();
但是当我写$result->execute()时;我不断地发现这个错误:

PHP致命错误:未捕获PDO异常:SQLSTATE[42000]: [Microsoft][ODBC驱动程序17 for SQL Server][SQL Server]Falsche语法 在Nähe von“P1”中。在C:…\werte.php:96中

堆栈跟踪:

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

1{main}

在第96行的C:\…\werte.php中抛出

第96行是“$result->execute();”

我已经尝试了不同的方法,比如使用
bindValue()
而不是
bindParam()
,我尝试在
bindParam()
中将值
“limit1”
直接解析为一个整数

解决方案 我不得不使用TOP而不是LIMIT。我还必须删除bindParams()部分


LIMIT
子句不是标准SQL的一部分。MySQL、PostgreSQL和SQLite支持它作为SQL的供应商扩展。 SQL Server也有类似的功能:
TOP

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

错误消息似乎与发布的代码无关。更不用说SQL server不支持限制了。这里有些地方很不对劲,实际上部分代码是错的(请参阅我编辑的文章中的解决方案)。我还想更改限制(见加布里埃尔·杜拉克的第一个答案),谢谢你的回答。我像你写的那样做了,但同样的错误:/Hello,我终于解决了问题。你的答案很有效。问题是result->bindParam。我在原始帖子中发布了解决方案。
$sql = "SELECT top :limit1 * FROM TblWerte";
$result = $db->prepare($sql);
$result->bindParam(':limit1 ', $limit1);
$limit1 = 15;
$result->execute();