2009-11-17 101 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