PHP datetime

Posted by: 邱小新 at 上午11:42:00 in
  • time() 回傳目前自1970/1/1的總秒數
  • date(format, time) 回傳時間的格式化字串,time 沒有指定時預設值是 time()。
  • DateTime.format() 回傳時間的格式化字串。
  •  

  • $filDate2=date('Y-m');
  • $date = new DateTime($filDate2."-01");
  • $date->add(new DateInterval('P1M'));
  • $filDate3=$date->format('Y-m');
  •  

  • DateTime 类
  • DateInterval 类

PHP MYSQL NULL bind_param

Posted by: 邱小新 at 下午3:40:00 in
  • using nulls in a mysqli prepared statement
  • 使用 bind_param 的變數必須指定為 NULL,不可以包含雙括號。所以 POST 變數都必須另外判斷並重新指定 NULL 值。
  • $stmt->bind_param("iisi", $_POST["hour"], $_POST["status"], $_POST["date"], $_POST["lid"]);
    if ($_POST["hour"] == "null") $_POST["hour"]=NULL;
    if ($_POST["date"] == "null") $_POST["date"]=NULL;
    

MySQL 取得月份最後一天

Posted by: 邱小新 at 下午6:20:00 in
  • 取得一個月份資料
    SELECT * FROM XXX WHERE Date LIKE '2024-03-%'
  • 取得月份最後一天
    SELECT LAST_DAY("2023-3-11")
  • 取得月份第一天
    SELECT LAST_DAY("2023-3-11" - INTERVAL 1 MONTH) + INTERVAL 1 DAY
  • 取得月份最後一天
    SELECT DATE_ADD(DATE_ADD('2018-05-01',INTERVAL 1 MONTH),INTERVAL -1 DAY)

SQL left join

Posted by: 邱小新 at 下午2:02:00 in
  • 如果有要比對 LEFT JOIN TABLE 的條件,請放在 LEFT JOIN ON 做比對,WHERE 只能放主 TABLE 的條件比對。比如
    錯誤 SELECT b.WorkingHour FROM Employee a LEFT JOIN LaborCost b ON a.id=b.EmployeeID WHERE a.id=? AND b.Month LIKE '$filDate3%'。
    正確 SELECT b.WorkingHour FROM Employee a LEFT JOIN LaborCost b ON a.id=b.EmployeeID AND b.Month LIKE '$filDate3%' WHERE a.id=?。
  • 另外 GROUP BY,ORDER BY 也不能放子表的欄位,只能主表的欄位。比如
    錯誤 SELECT b.StageID, SUM(TIME_TO_SEC(b.Time))/60/60 From Stage a LEFT JOIN WorkingTime b ON a.id=b.StageID AND b.ProjectID=? and b.EmployeeID=? GROUP BY b.StageID ORDER BY b.StageID。
    正確 SELECT a.id, SUM(TIME_TO_SEC(b.Time))/60/60 From Stage a LEFT JOIN WorkingTime b ON a.id=b.StageID AND b.ProjectID=? and b.EmployeeID=? GROUP BY a.id ORDER BY a.id。
  • How to LEFT JOIN Multiple Tables in SQL