【问题标题】:I'm encountering an error about "Expr1000"我遇到关于“Expr1000”的错误
【发布时间】:2018-11-04 07:39:40
【问题描述】:

最近我构建了一个查询,假设基于INNER JOIN 为我提供以下所有列,而UserID 的其他表是常见的,并计算它们以给我最常见的一次:

SELECT PhonesTBL.OperatingSystem 
   and PhonesTBL.Memory 
   and PhonesTBL.BatterySize 
   and PhonesTBL.CameraQuality 
   and PhonesTBL.Processor 
   and PhonesTBL.ScreenSize 
   and PhonesTBL.PhoneType 
FROM
    PhonesTBL 
INNER JOIN 
    HistoryTBL ON PhonesTBL.PhoneID = HistoryTBL.PhoneID 
WHERE 
    UserID = {0} 
GROUP BY OperatingSystem 
     and Memory 
     and BatterySize 
     and CameraQuality 
     and Processor 
     and ScreenSize 
     and PhoneType 
ORDER BY
    Count(*) DESC

此查询返回 Expr1000。

【问题讨论】:

  • 您出现 - {0} - 正在使用 String.format 向您的 SQL 添加参数。这会让您面临 SQL 注入安全漏洞。永远不要这样做,始终使用参数化查询。
  • 好吧,理查德,我正在为学校项目做这个,我不介意反对 sql 注入,谢谢你的提示,我很感激。
  • 太多开发者盲目从Stack Overflow: 复制。因此,您认为快速测试/学习项目可能会产生后果。
  • 请注意,这不是一个用于家庭作业项目的站点,它用于构建互联网工件。此外,作为不考虑项目而雇用开发人员的人,无论项目多么小或预期用途如何,都应该始终使用安全的编程模型;养成正确编程的习惯,并坚持下去。祝你好运!
  • 请注意,使用参数化 SQL 的好处不仅仅是安全性。它有助于避免转换问题,并使您的代码更清晰。到目前为止,我衷心赞同 cmets,并鼓励您立即采用参数化查询。我知道当你刚开始的时候似乎有很多东西要学,但这是一个值得从一开始就“做正确的事”的地方。

标签: c# sql ms-access


【解决方案1】:

SQL 中的and 关键字执行布尔与。因此,您的投影(select 子句)和 group by 子句都生成一个值。

我希望您希望在每种情况下都有逗号分隔的表达式列表

Select PhonesTBL.OperatingSystem,
  PhonesTBL.Memory,
  PhonesTBL.BatterySize,
  PhonesTBL.CameraQuality, 
  PhonesTBL.Processor,
  PhonesTBL.ScreenSize, 
  PhonesTBL.PhoneType
[…]

【讨论】:

  • 好的,现在它解决了我的 expr1000 问题,谢谢,Ohad。
猜你喜欢
  • 2012-04-24
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-04
  • 1970-01-01
相关资源
最近更新 更多