2009-11-17 4 views
0

테이블에 날짜 데이터 유형을 어떻게 선언합니까? 그것은 단순히 다음과 같은 것입니까? 나는 POST 양식을 통해 문자열을 사용하여 해당에서 조회 할 경우SQLite에서 날짜 비교

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

이제 :

<?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

+3

먼저 응답이 무례합니다. 이 사이트는 전문 지식 수준에 관계없이 프로그래밍 질문 용입니다. 둘째로 문제 해결 방법을 알려주지 않고 문제에 대해 알려 주셨습니다. 어떤 부분이 사출 공격에 취약합니까? 어떻게 수정해야합니까? 셋째, SQLite에 날짜 또는 시간 형식이 없다는 것을 알려 주셔서 감사합니다. 그게 바로 나에게 유용했던 응답의 유일한 부분이다. 마지막으로, 저는 빠른 답변을 찾고 있습니다. 프로그래밍 교훈이 아닙니다. 내 이해에서, 그게 스택 오버플로에 대해 무엇입니까 : 빠른 우리의 프로그래밍 질문에 대답. – user5243421

+0

당신의 질문은 당신에게 빠른 답변을 줄 수없는 방법으로 언급되었습니다. SQL 주입 공격이 무엇인지, 취약점을 발견하고 수정하는 방법에 대한 (Google) 연구를 수행 할 수 있다고 가정했습니다. 내 개정 된 대답으로 재미있게 지내십시오. – hillu