如果表中没有错误的值,则警告用户(Mysql + C)

时间:2011-09-19 06:21:34

标签: mysql c

我有一张桌子:

For_Sconti  |    Cat_Sconti    |  Sconto 

  7148               A1          451.00

如何阻止用户在何时插入错误(不在表中)For_Sconti值 试图更新Sconto字段?

简而言之,通过C接口,我想更新上面提到的表格。

do {
    printf("Insert For_Sconti: \n");
    scanf("%s", For_Sconti);
    }
    while (strlen(For_Sconti)>5);

在这里,我想在用户插入不在表格中的For_Sconti值时警告用户。

我想到了这个:

strcat(query, "SELECT For_Sconti,Cat_Sconti FROM Sconti;");
result = mysql_store_result (conn);
mysql_field_seek (result, 0);         
row = mysql_fetch_row (result);     

但我相信,这只是胡说八道。

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:0)

尝试使用mysql_affected_rows()功能。如果结果为0,则用户尝试修改不存在的For_Sconti。

答案 1 :(得分:0)

以下是您必须遵循的步骤: 1.-获取For_Sconti值。 2.-写一个像这样的查询:   sprintf(outString“SELECT%s FROM myTable”,readValue);

3.-然后检查结果以查看它是否包含某些内容(如果它包含某些内容)然后允许用户插入新值,否则警告用户该错误。

答案 2 :(得分:0)

主键可防止重复;外键限制允许值的范围。

假设您有一个外键约束,您可能只想尝试插入用户提供的数据,并捕获您的C接口库在违反外键约束时返回的错误。此方法只需要一次往返数据库。

如果您想知道数据库中是否存在用户提供的值,请执行类似这样的查询,并检查其返回值。

SELECT (COUNT(*) > 0) as For_sconti_exists
FROM Sconti
WHERE For_sconti = <the user-supplied value>

此方法需要两次往返有效值 - 一次用于确定值是否存在,另一次用于插入行。你还必须

  • 注意事务隔离级别,
  • 在单个事务中执行两个语句(或者有人可以删除您认为在SELECT和INSERT之间有效值的行),并且
  • 无论如何,
  • 陷阱错误。