2009-11-17 115 views
0

如何在表中声明日期数据类型?它是简单的以下?SQLite中的日期比较

CREATE TABLE sampleDB (..., sampledate DATE, ...) 

现在,如果我想用通过POST形式;从查询:

<?php 
    $formdate = $_POST["inputname"]; 

    if($formdate) { 
     echo "Searching using query: ".$formdate."<br>"; 
     $db = new SQLiteDatabase("testDB.db"); 
     $query = $db->query("SELECT * FROM sampleDB WHERE sampledate = ".$formdate); 
     while($entry = $query->fetch(SQLITE_ASSOC)) { 
      echo "result: " ... "<br>"; 
     } 
    } 
?> 

这似乎并没有工作。它不会返回我想要的条目。

当我将日期作为字符串存储并比较字符串时,一切正常,但如果SQLite有DATE数据类型,我认为应该有方法使用它!

回答

5

您发布的代码存在漏洞,似乎可以让任何用户轻松注入任意SQL命令。解决这个问题的两种常见方法是(1)消毒输入和(2)使用将命令与(可能不可信的)参数分开的API。对于(1)我会在PHP文档中寻找特定于SQL的转义函数。 (2)的一个众所周知的例子是Perl的DBI。 (我不知道PHP是否有类似的库。)

在SQLite中,没有日期或时间类型。如果数据库中已经有日期字符串,则必须确保它们的格式一致。来自SQLite手册的Date and Time Functions列出了一些可能对您的查询有用的函数。

+0

谁投我的答案。不说理由地说“我不喜欢你的答案”是蹩脚的。 – hillu 2009-11-17 22:40:21

+3

首先,你的回答很粗鲁。无论专业水平如何,本网站都是针对编程问题的。 其次,你告诉我一个问题,而不告诉我如何解决它。什么部分容易受到注入攻击?我如何解决这个问题? 第三,感谢您告诉我SQLite没有日期或时间类型。这是您的回应中唯一对我有用的部分。 最后,我正在寻找一个快速的答案;不是编程课程。 从我的理解中,这就是Stack Overflow的含义:快速回答我们的编程问题。 – user5243421 2009-11-18 08:07:47

+0

你的问题是以一种让我无法给你快速回答的方式说明的,只是一些提示。我认为你可以做一些(谷歌)研究什么是SQL注入攻击,如何发现漏洞并修复它。与我的修改答案玩得开心。 – hillu 2009-11-18 11:18:20