2012-05-07 2 views
2

IS NULL에 대한 SQL 쿼리 검사에서 가양 성을 피하는 방법은 무엇입니까?IS NULL에 대한 SQL 쿼리 검사에서 가양 성을 피하는 방법은 무엇입니까?

if(sqlsrv_has_rows 문을 추가하여 위양성을 수정 한 것으로 보입니다.

는 PHP :

/* 

IF select of 1900 datein has rows 
update datein 

IF select of 1900 dateout has rows 
update dateout 

IF select of 1900 datein AND dateout no rows 
insert datein 

*/ 
$datein_s="SELECT TOP 1 datein FROM clocked WHERE datein='1900-01-01 00:00:00' AND userid=? ORDER BY datein DESC"; 
$datein_sr=sqlsrv_query($dbconnect,$datein_s,$params) or die("Error datein:".print_r(sqlsrv_errors(),true)); 
$datein=sqlsrv_fetch($datein_sr); 
if(sqlsrv_has_rows($datein_sr)===FALSE) 
{ 
$datein="NOROWS"; 
} 
else 
{ 
$datein="HASROWS"; 
} 

$dateout_s="SELECT TOP 1 dateout FROM clocked WHERE dateout='1900-01-01 00:00:00' AND userid=? ORDER BY dateout DESC"; 
$dateout_sr=sqlsrv_query($dbconnect,$dateout_s,$params) or die("Error dateout:".print_r(sqlsrv_errors(),true)); 
$dateout=sqlsrv_fetch($dateout_sr); 
echo $dateout; 
if(sqlsrv_has_rows($dateout_sr)===FALSE) 
{ 
$dateout="NOROWS"; 
} 
else 
{ 
$dateout="HASROWS"; 
} 

if($datein==="HASROWS") 
{ 
$datein_q1="UPDATE clocked SET datein=GETDATE() WHERE EXISTS(SELECT TOP 1 datein FROM clocked WHERE datein='1900-01-01 00:00:00' AND userid=? ORDER BY datein DESC);"; 
$datein_qr1=sqlsrv_query($dbconnect,$datein_q1,$params) or die("Error update datein:".print_r(sqlsrv_errors(),true)); 
echo "Datein and out are HASROWS"; 
} 
else if ($dateout==="HASROWS") 
{ 
$dateout_q1="UPDATE clocked SET dateout=GETDATE() WHERE EXISTS(SELECT TOP 1 dateout FROM clocked WHERE dateout='1900-01-01 00:00:00' AND userid=? ORDER BY dateout DESC);"; 
$dateout_qr1=sqlsrv_query($dbconnect,$dateout_q1,$params) or die("Error update dateout:".print_r(sqlsrv_errors(),true)); 
echo "Dateout NOROWS"; 
} 
else if ($datein==="NOROWS"&&$dateout==="NOROWS") 
{ 
$datein_q2="INSERT INTO clocked(datein,userid) VALUES(GETDATE(),?);"; 
$datein_qr2=sqlsrv_query($dbconnect,$datein_q2,$params) or die("Error insert datein:".print_r(sqlsrv_errors(),true)); 
echo "Datein and Dateout NOROWS"; 
} 
else 
{ 
echo "ERROR your query may be broken!"; 
} 
+0

는 결과 집합의 행 수를 확인합니다. – MatBailie

+0

NULL = "알 수없는 값"참/거짓/비어 있지 않음'item' TEXT DEFAULT NULL if ($ item! == NULL) – Philip

+0

NULL이 아닌 경우 비어 있으면 왜 그 날짜/날짜 시간 필드에 허용되는 유일한 값은 무엇입니까? @Philip –

답변

4

가 나는 경우 (sqlsrv_has_rows 문을 추가하여 내 오탐 (false positive)을 해결 한 듯 당신이 밖으로 모든 값을 끌어하기 전에

+0

+1 : 좋은 선택;) – MatBailie

관련 문제