问题标签 [database-agnostic]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
648 浏览

sql - 用户输入如何破坏/利用此 SQL 查询代码?

可能重复:
我可以通过转义单引号并用单引号包围用户输入来防止 SQL 注入吗?

我们有一个不使用位置参数进行查询的遗留应用程序,而且到处都有 SQL。决定(在我从这里开始之前)由于用户输入可以包含撇号,因此每个字符串输入都应该为这些撇号手动转义。

这是基本的原始代码(不是我写的),翻译成 C# 以便于使用:

这似乎真的可以以某种方式被打破,但我不知道如何通过用户输入来利用它。假设用户输入在点击 之前是未经过滤的_IsValidLogin,并且忘记密码似乎是以纯文本形式存储的。

永久支持它的解决方案是显而易见的——使用位置参数——但我需要一些弹药来向管理层展示为什么/如何这段代码不安全,因此可以分配时间/美元来修复它。

注意:我假设这可以被打破,但实际上可能并非如此。我不是 SQL 超级明星。

注意 2:我已将此问题表达为与数据库无关,但如果您可以将此代码用于某个引擎,我欢迎您的贡献。

0 投票
1 回答
168 浏览

database-design - 保证子记录要么在一个表中,要么在另一个表中,但不能同时在两者中?

我有一个有两个子表的表。对于父表中的每条记录,我想要一个子表中的一个且只有一个记录——不是每个记录,也不是没有记录。我该如何定义?

这是背景故事。随意批评这个实现,但请回答上面的问题,因为这不是我遇到的唯一一次:

我有一个数据库,其中包含与用户调查有关的数据。它最初设计为使用一种身份验证方法来启动调查。从那时起,要求发生了变化,现在人们可以通过两种不同的方式登录以开始调查。

最初,我在调查表的列中捕获了身份验证令牌。由于需求发生了变化,我想在身份验证中捕获其他三个数据位。因此,对于调查表中的每条记录,我要么拥有一个令牌,要么拥有一组三个。所有这四个都是不同的类型,所以我的想法是,而不是有四个列,其中一个将是空的,或者三个将是空的(或者更糟糕的是,这些场景中的任何一个都是糟糕的混搭),我将有两个子表,一个用于保存单个身份验证令牌,另一个用于保存三个。问题是,我不知道如何在 DDL 中定义它。

我正在使用 MySQL,所以也许有一个 MySQL 没有实现的功能让我可以做到这一点。

0 投票
1 回答
3024 浏览

cakephp - CakePHP 多重嵌套连接

我有一个应用程序,其中几个模型由 hasMany/belongsTo 关联链接。例如,A 有很多 B,B 有很多 C,C 有很多 D,D 有很多 E。另外,E 属于 D,D 属于 C,C 属于 B,B 属于 A。使用 Containable 行为已经非常适合控制每个查询返回的信息量,但是在使用涉及表 D 的条件时尝试从表 A 获取数据时我似乎遇到了问题。例如,这是我的“A”的示例模型:

这仍然给了我'A'中的所有记录,如果它的相关'E'记录不满足条件,那么我就得到这个:

当 If 'E.myfield' != $some_value 时,我根本不希望返回记录。

我希望这足以清楚地表达我的问题......

基本上,我想要以下查询,但是以一种与数据库无关/CakePHP-y 的方式:

0 投票
5 回答
273 浏览

sql - 这种行为是否存在于所有主要数据库中?

它适用于其他数据库number='number'true

0 投票
2 回答
681 浏览

mysql - 实体框架和数据库不可知编程,可能性?

我们希望使用 Entity Framework (.NET 4.0) 来构建可以处理 Sql Server、MySQL 和 Oracle 的应用程序。也许还有 Sqlite。

通过配置文件中的一些设置来切换数据库供应商应该很容易。

这可能吗?我更喜欢现实生活中的例子!

你使用了什么样的供应商?

0 投票
4 回答
302 浏览

sql - 在记录集中没有出现的字段上选择 DISTINCT?

我想做一个SELECT DISTINCT guid, ...,但我不想guid出现在记录集中。我该怎么做呢?

0 投票
3 回答
222 浏览

sql - SQL中如何根据范围对记录进行分组

您好我想创建一个 SQL 来根据范围对记录进行分组

例如,假设我有

现在我需要根据 "Number": 的范围来获取记录[100,200),[200,300),[300,400) and [0,400]。对于每个范围,我需要最新“时间”的“价格”

所以结果应该是

我怎样才能构造一个 SQL 语句来产生这个?

我没有处理特定的数据库。所以我正在寻找没有特定的数据库 SQL 语句

0 投票
8 回答
476 浏览

sql - SQL 中日志记录表的适当查询和索引

假设有一个名为“log”的表,其中有大量记录。

应用程序通常通过简单的 SQL 检索数据:

logLevel并且creationData有索引,但是记录的数量使得检索数据需要更长的时间。

我们如何解决这个问题?

0 投票
4 回答
318 浏览

sql - 通过存储原始字符串大小写和小写来绕过数据库区分大小写问题是不是很疯狂?

我正在实现一个数据库,其中几个表具有字符串数据作为候选键(例如:用户名),并将被相应地编制索引。对于我想要的这些字段:

  1. 当有人在这些键上查询表时不区分大小写

  2. 以某种方式保留最初编写的案例,以便应用程序可以使用原始案例将数据呈现给用户

我还希望数据库模式尽可能独立于数据库,因为应用程序代码不(或不应该)从属于特定的 RDBMS。

另外值得注意的是,对数据库进行的绝大多数查询将由应用程序代码完成,而不是通过客户端直接访问表。

在实现这一点时,我遇到了很多烦人的问题。一是并非所有 RDBMS 都以相同的方式实现 COLLATE(在这种情况下,区分大小写似乎可以在模式级别进行调整)。另一个问题是排序规则和区分大小写选项可以设置在多个级别(服务器、数据库、表(?)、列),我无法向应用程序保证它将获得什么设置。另一个问题是 COLLATE 本身可能会变得毛茸茸,因为除了区分大小写之外,还有更多内容(例如:unicode 选项)。

为了避免所有这些令人头疼的问题,我正在考虑通过为一个数据存储两列来完全避开这个问题。一列使用原始大小写,另一列被应用层降为小写。

eg:表中的两个字段

在我看来,这样做的优点和缺点是:

优点:

  1. 没有歧义 - 应用程序代码将管理案例转换,当底层 RDBMS/设置发生变化时,我永远不需要担心单元测试“神秘地”失败。

  2. 索引上的搜索将是干净的,并且永远不会因整理功能或调用 LOWER() 或任何东西而减慢(假设这些事情会减慢索引,这似乎是合乎逻辑的)

缺点:

  1. 双倍数据需要额外的存储空间

  2. 好像有点野蛮

我知道它会起作用,但同时它闻起来不对劲。

这样做是疯狂/毫无意义吗?是否有什么我不知道的东西使区分大小写的问题不像我现在认为的那样棘手?

0 投票
5 回答
134 浏览

php - 如何让您的代码存储未确定的列数?

我认为我的问题可能不清楚,但我会尝试通过示例来解释它。

假设我们有大约 100 种不同的汽车型号,显然所有汽车都将共享共同的零件或规格,但并非所有零件都在所有这 100 个汽车品牌之间共享

在这种情况下存储这些规范的最佳做法是什么?

我的想法是在每一列中存储最常见的规范,并且可以将未确定的(其余)规范保存或序列化为对象或数组。

学说通过这些数据类型(数组对象)简化了这个操作你认为这是个好主意还是可以和我分享你的经验

这是我在 2 个简单表格中的想法

我认为我的想法很糟糕,因为它破坏了搜索能力