iT邦幫忙

0

[php] 時間區間確認,mysql語法執行問題

  • 分享至 

  • xImage

大家好:
若時間區間衝突,就不寫入資料,但不管資料庫有沒有值都會跳到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{
//沒比對到寫入資料
}
看更多先前的討論...收起先前的討論...
wacky159 iT邦新手 4 級 ‧ 2020-05-21 14:10:20 檢舉
$sqlftime1=$conn->prepare($sqlftime);
$sqlftime1->execute(array(

"startdate"=>$startdt,
"endate"=>$endtdt

));

if($sqlftime1){
echo json_encode("有資料");
}
$sqlftime1 這邊只是包含函數執行結果 這邊只會反true false
rowCount 才會返查詢到幾筆資料
mayyola iT邦研究生 1 級 ‧ 2020-05-21 14:54:49 檢舉
但如果資料庫沒有資料的話,$sqlftime1應該是要false? 謝謝
wacky159 iT邦新手 4 級 ‧ 2020-05-21 15:11:02 檢舉
$sqlftime1 這邊的 true false 是告訴你SQL執行有沒有錯誤
rowCount 才是他計算執行後得到的資料行數
mayyola iT邦研究生 1 級 ‧ 2020-05-22 15:50:07 檢舉
謝謝
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
wacky159
iT邦新手 4 級 ‧ 2020-05-21 15:19:08
最佳解答

建議可以去看看PHP官方文件這邊有你問的方法定義

mayyola iT邦研究生 1 級 ‧ 2020-05-22 17:14:06 檢舉

不好意思,因為我是看書,那書這樣寫是不對的嗎? 謝謝
https://ithelp.ithome.com.tw/upload/images/20200522/20097057VcjT0tJZyp.jpg

mayyola iT邦研究生 1 級 ‧ 2020-05-22 17:24:53 檢舉

好像可以用

$result = $sth->fetch(PDO::FETCH_ASSOC);
if($result){

echo "有值";
}
else{

echo "無值";

}
wacky159 iT邦新手 4 級 ‧ 2020-05-25 13:50:38 檢舉

你如果要用fetch的話 可以用

if(!empty($result)){
    echo "有值";
} else {
    echo "無值";
}
0
淺水員
iT邦大師 6 級 ‧ 2020-05-21 16:02:29

根據官方文件

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 計算共幾筆)

mayyola iT邦研究生 1 級 ‧ 2020-05-22 17:22:13 檢舉

淺水員您好

SELECT count(...) 是返回筆數,因為我還需要裡面的值的話,是否要再寫一行sql呢? 謝謝
淺水員 iT邦大師 6 級 ‧ 2020-05-22 18:41:46 檢舉

是的,如果還需要裡面的值的話。
另外,由於分為兩次 SQL 取值,可能要考慮兩次取值的中間是否有其他使用者寫入造成不吻合的狀況。
另外單純只是要判斷有沒有資料,而不需要得知幾筆的話,直接 fetch 看看有沒有資料是可以的(沒資料或是到達資料尾端會回傳 false)

mayyola iT邦研究生 1 級 ‧ 2020-05-22 23:18:55 檢舉

謝謝您!!

我要發表回答

立即登入回答