我的数据库中有2个表.一个是订单,一个是公司.
订单具有以下结构:
OrderID | attachedCompanyIDs
------------------------------------
1 1,2,3
2 2,4
Run Code Online (Sandbox Code Playgroud)
公司有这样的结构:
CompanyID | name
--------------------------------------
1 Company 1
2 Another Company
3 StackOverflow
4 Nothing
Run Code Online (Sandbox Code Playgroud)
要获得订单的公司名称,我可以这样查询:
SELECT name FROM orders,company
WHERE orderID = 1 AND FIND_IN_SET(companyID, attachedCompanyIDs)
Run Code Online (Sandbox Code Playgroud)
该查询工作正常,但以下查询没有.
SELECT name FROM orders,company
WHERE orderID = 1 AND companyID IN (attachedCompanyIDs)
Run Code Online (Sandbox Code Playgroud)
为什么第一个查询有效但第二个查询无效?
第一个查询返回:
name
---------------
Company 1
Another Company
StackOverflow
Run Code Online (Sandbox Code Playgroud)
第二个查询只返回:
name
---------------
Company 1
Run Code Online (Sandbox Code Playgroud)
为什么这样,为什么第一个查询返回所有公司,但第二个查询只返回第一个查询?
我正在将几个硬编码的查询转换为应用程序并立即构建到参数化查询.我遇到一个特定查询的问题,它有一个in子句:
UPDATE TABLE_1 SET STATUS = 4 WHERE ID IN (1, 14, 145, 43);
Run Code Online (Sandbox Code Playgroud)
第一个参数很简单,因为它只是一个普通的参数:
MySqlCommand m = new MySqlCommand("UPDATE TABLE_1 SET STATUS = ? WHERE ID IN (?);");
m.Parameters.Add(new MySqlParameter("", 2));
Run Code Online (Sandbox Code Playgroud)
但是,第二个参数是一个整数列表,表示需要更新的行的ID.如何传递单个参数的整数列表?或者,您将如何设置此查询,以便您不必在每次调用它时完全构建它,并且可以防止SQL注入攻击?