大家好:
若時間區間衝突,就不寫入資料,但不管資料庫有沒有值都會跳到if有資料,不知道是哪裡有錯誤,謝謝
$startdt=2020-05-21 07:00;
$endtdt=2020-05-21 08:00;
$sqlftime="select * from substitue where ((starttime >=:startdate and starttime<=:endate) or (endtime >=:startdate and endtime<=:endate))"; //判別代理時間是否有衝突
//想問如果用between要怎麼帶變數進去呢?
$sqlftime1=$conn->prepare($sqlftime);
$sqlftime1->execute(array(
"startdate"=>$startdt,
"endate"=>$endtdt
));
if($sqlftime1){
echo json_encode("有資料");
}
// 改用rowCount()就沒問題,想問為什麼
$count = $sqlftime1->rowCount();
if($count>0){
echo json_encode("有資料");
}
else{
//沒比對到寫入資料
}
根據官方文件
If the last SQL statement executed by the associated PDOStatement was a SELECT statement, some databases may return the number of rows returned by that statement. However, this behaviour is not guaranteed for all databases and should not be relied on for portable applications.
所以我不會用 rowCount 去計算 SELECT 出來的資料數
(不同資料庫會有不同行為)
可以用 SELECT count(...) 去抓總共幾筆資料
(如果資料量不大或是有下 LIMIT 也可以用 fetchAll 取出來後用 count 計算共幾筆)