PostgresException:42601:“00”或附近的语法错误
Posted
技术标签:
【中文标题】PostgresException:42601:“00”或附近的语法错误【英文标题】:PostgresException: 42601: syntax error at or near "00" 【发布时间】:2021-12-20 16:04:16 【问题描述】:我正在开发 ASP.NET CORE MVC 项目
我需要从前端传递两个日期,如图所示:HERE
我的看法:
<form method="post" asp-controller="HOME" asp-action="AllTransactionsList">
<label> Start Date</label>
<input type="date" name="startDate"></br>
<label> End Date</label>
<input type="date" name="endDate"></br>
<button type="submit">ADD</button>
</form>
我的控制器方法:
public IActionResult AllTransactionsList(DateTime startDate, DateTime endDate)
var dataset = new DataSet();
using var connection = new NpgsqlConnection(connString);
connection.Open();
Console.WriteLine(startDate);
var query = String.Format(@"SELECT accounts.account,accounts.type,DATE(transactions.date),transactions.amount,transactions.note FROM transactions FULL JOIN accounts ON transactions.accountid=accounts.accountid WHERE transactions.date BETWEEN 0 AND 1;", startDate, endDate);
using (var command = new NpgsqlCommand(query, connection))
var adapter = new NpgsqlDataAdapter(command);
adapter.Fill(dataset);
return View(dataset);
但是在执行 webapp 时,我收到“PostgresException: 42601: syntax error at or near "00"”错误。
我知道将两个日期作为参数传递有问题。谁能帮帮我?
【问题讨论】:
你一定忘记了日期文字周围的单引号。 @LaurenzAlbe 来自网络表单,即使使用单引号,也会导致潜在的 SQL 注入 @Bruno 对,这就是你必须正确转义这些值的原因。 @LaurenzAlbe 转义值的问题在于,作为这些工具的用户,通常很难正确处理 (here is a similar example with php/mysql):当客户端库支持时,通常最好使用参数化查询传递参数它。 @Bruno 再次,非常正确。我只是想指出错误的原因。 【参考方案1】:你不应该像这样直接在查询字符串中传递参数:
var query = String.Format(@"SELECT ... BETWEEN 0 AND 1;", startDate, endDate);
首先,像这样在查询字符串中包含参数可能会产生语法错误(正如您所注意到的),除非它本身是有效的 SQL。
其次,更重要的是,这将导致 SQL 注入漏洞(即使您要在 '0'
周围加上引号)。
相反,您应该pass parameters with placeholders。这是文档中的示例:
using (var cmd = new NpgsqlCommand("INSERT INTO table (col1) VALUES (@p)", conn)) cmd.Parameters.AddWithValue("p", "some_value"); cmd.ExecuteNonQuery();
【讨论】:
以上是关于PostgresException:42601:“00”或附近的语法错误的主要内容,如果未能解决你的问题,请参考以下文章
如何从 PostgresException 中获取错误 sql
连接到 Redshift 集群时出错 - Npgsql.PostgresException: 28000: no pg_hba.conf entry for host
PostgresException: 42883: function ifnull(integer, integer) does not exist
DB2 SQL error: SQLCODE: -104, SQLSTATE: 42601, SQLERRMC
PostgreSQL:错误:42601:返回“记录”的函数需要列定义列表
Amazon Redshift CREATE FUNCTION ERROR: 42601: 在“默认”或接近“默认”时出现语法错误