执行MySQL查询时如何获取错误的值?

时间:2011-01-10 18:12:12

标签: php mysql sql

假设我有这个问题:

SELECT  *
FROM    students_results
WHERE   full_name LIKE '".trim($_POST['full_name'])."'
 AND mother_name LIKE '".$database->escape_value(trim($_POST['mother_name']))."'
 AND birthday = '".$database->escape_value($_POST['year2'])."'"

我需要为vistor显示一条消息,告诉他他输入了错误的姓名或错误的母姓或错误的一年。

现在,我为用户显示一条消息,表明他输入了错误的值,我想显示有关他输入的错误值的详细信息。

提前致谢。

4 个答案:

答案 0 :(得分:3)

确定。有点麻烦:

SELECT
    IF(`full_name` = ?,1,0)
  | IF(`maiden_name` = ?,2,0)
  | IF(`birthday` = ?,4,0)
    AS `correctness_mask`
WHERE
      `full_name` = ? 
   OR `maiden_name` = ?
   OR `birthday` = ?
HAVING 
   `correctness_mask` != 0

如果对于检索到的行,correctness_mask为7(1 | 2 | 4),则表示您获得了正确的行。对于所有其他行,您必须检查是否在该掩码中设置了相应的位。

顺便提一下,请注意查询中的问号。这是我隐含的暗示,您可以使用prepared statements而不是直接将$_POST值插入到查询字符串中。

答案 1 :(得分:2)

  

执行时如何获取错误的值   MySQL查询?

你不能。

以两个John Smith为例,其中一个出生于1/1/70,一个名叫Ann的母亲,另一个出生于1/1/80,母亲名叫爱丽丝。

当年长的约翰史密斯进入1/1/70和爱丽丝时,你怎么知道年轻的约翰史密斯进入错误的生日呢?

你无法确定。

答案 2 :(得分:0)

你标记了php。您应该使用Php Mysql Ref.将结果发送到数据库,然后确定是否有结果退出。您可以使用mysql_fetch_row和几个if来显示您想要的任何消息。

答案 3 :(得分:0)

如果Students_results表中包含学生姓名,母亲姓名,生日,那么我认为数据库没有足够的标准化。规范化也可以解决您的问题。您可以使用student_id来标识正确的行,而不是名称+母姓+ bdate的复合组合。