2015-01-22 4 views
-1

폼의 날짜 필드를 mysql 데이터베이스에 삽입해야합니다. 사용자가 날짜를 입력하지 않으면 현재 날짜를 사용해야합니다. 나는 형태로 날짜를 제출할 때 그것은 잘 작동MySQL 데이터베이스에 PHP 날짜 삽입

if ($_POST[date]==0) 
    {$ref_date=date('Y-d-m');} 
    else {$ref_date=$_POST[date];} 

$L="insert into referral (ID,patient, Doctor,Date) values (default,$pat,$doc,'$ref_date')"; 
     mysql_query($L) or die(mysql_error()); 

,하지만 난 그 필드를 비워 둘 때 그것은 0000-00-00을 입력 : 내 코드입니다.

+0

당신의 코드가 SQL 주입을 포함 하나는 존 귀족의 솔루션입니다! SQL 문에서 다양한 변수를 사용하지 마십시오. 명령문에 매개 변수가 필요하면 prepare 문 및/또는 매개 변수를 사용하십시오! –

+0

귀하의 권리. 실제로 pdo의 형식으로 전환하고 있지만, 버그가 어디에 있는지 확실하지 않았기 때문에 문제가 내 구현에 없다는 것을 확인하기 위해 다음과 같은 쿼리를 작성했습니다. 그런 다음이 코드를 게시하면 모든 사람들이 나의 모든 기능을 설명 할 필요가있는 것이 아니라 그 질문을 이해할 것입니다. mysql_query를 사용하여 함수를 반향 출력하고 MySQL에서 직접 테스트하여 버그를 찾을 수 있습니다. 매개 변수를 사용하여 비슷한 작업을 수행 할 수 있습니까? – pppp

답변

3

MySQL은 날짜가 YYYY-MM-DD 일 것으로 예상합니다. YYYY-DD-MM이 있습니다. 변경 :

$ref_date=date('Y-d-m'); 

로는 :

$ref_date=date('Y-m-d'); 
0

당신은하지만,주의를 기울여야한다, 아파치 (또는 어떤 PHP 서버를 사용중인)는 MySQL 서버에 비해 다른 시간/시간대를 가질 수있다.

아파치의 서버가 MySQL보다 2 시간 앞서 있다고 가정 해 보겠습니다. 1 월 22 일 오전 1시 (아파치에서)라면, date ('Ỹ-m-d')를 사용하면 2015-01-22가 반환되고 CURDATE() (MySQL 현재 날짜 함수)는 2015-01-21을 반환합니다.

그래서 두 가지 가능한 솔루션이 있습니다.

$ref_date = date('Y-d-m'); 

다른 하나는 될 것 삽입 CURDATE() :

$ref_date = 'CURDATE()'; 
+0

그래서 $ ref_date는 "CURDATE()"문자열이되지만 MySQL은 MySQL 함수를 의미하는 것으로 이해합니까? – pppp

+0

맞습니다. 게다가 매개 변수를 문자열로 전달하지 않는 것이 좋습니다. Prepared Statements와 같이 더 안전한 것을 사용하십시오. – Aleksandrus

+0

서버의 시간대가 무엇인지 어떻게 알 수 있습니까? 내 웹 페이지 용 서버와 MySQL 데이터베이스를 모두 제공 한 호스트를 사용하고 있습니다. – pppp

관련 문제