2011-06-20 36 views
0

我有一个插入语句将插入文本框中的值。它现在工作正常,我想检查文本框不能通过使用SQL查询为空。SQL插入和检查输入值不为空

我的插入语句是这样的:

INSERT INTO guestpasstypes(guestPasstype_Name)values('" + tbPassType.Text + "')" 
+0

为什么在SQL查询?检查主机语言不是更好吗?如果查询结果为空,应该是什么结果?它应该忽略还是给出错误? –

+0

它必须给出一个错误。我想检查使用需求的查询 – user682417

+1

您正在通过将用户键入的内容附加到代码中来邀请SQL注入。如果用户输入“密码;删除表用户”或类似的东西会怎么样? –

回答

1

我也同意,你应该避免调用该SQL,由于对注入攻击的可能性,但如果由于某种原因,你真的需要做到这一点,那么这应该做的伎俩:

"INSERT INTO guestpasstypes(guestPasstype_Name) 
    select '" + tbPassType.Text + "' from dual where '" + tbPassType.Text + "' <> '';" 
+0

很多谢谢Jose .. – user682417

1

使用您使用来从文本框中的文本,看它是否是空的或无效的任何一种语言。大多数语言都有这些检查。 (例如:php; isempty())另外,如果你不需要空格,也可以使用trim。

1

使guestPasstype_Name为NOT NULL,并确保MySQL以SQL一致性模式运行。以下可能的工作:

INSERT INTO guestpasstypes(guestPasstype_Name)values(
    IF('" + tbPassType.Text + "'='', NULL,'" + tbPassType.Text+"')" 
+0

非常感谢cem ..现在工作.. – user682417

1

我可以看到两个解决方案

  • 检查 'tbPassType.Text' 之前,你生成的SQL查询(推荐)
  • 在 'guestpasstypes' 表这样创建检查约束:

    ALTER TABLE dbo.guestpasstypes添加约束 CK_guestPasstype_Name CHECK((LEN(guestPasstype_Name])>(0)))

(给定的例子是为MSSQL,但我希望MySQL也有约束)