PHP MySQL SELECT..FROM..file LIKE %% OR date LIKE %% 資料和日期型態並存,無法輸入中文搜尋的解決方法
此為笨兔在摸索寫作過程中遇到的情況及解決方法,給自己參考記錄用的,若有需者就參考!若有錯誤或其它方法,請自行更正唄!
※倘若在 MySQL 資料庫內有個 test 資料表,其二個欄位 t_name、t_date(日期類型) 及資料如下:
| t_name | t_date |
| 笨兔 | 2019-06-20 |
| 小笨兔 | NULL |
| 大笨兔 | 2019-07-01 |
範例:若做個搜尋參數,SQL 設定如下 (笨兔以PDO函數來寫,用Mysql或MySQLi函數亦同)
※資料和日期類型並存搜尋,另一方法是用 CONCAT() 語法即可解決,此可參考笨兔另一隨手筆記:
<?php
$sql = "SELECT * FROM test WHERE t_name LIKE '%{$_GET['search']}%' OR t_date LIKE '%{$_GET['search']}%'";
$rs = $conn -> prepare($sql);
$rs -> execute();
?>
※以上 SQL 語法,若有做 $_GET['search'] 參數,則輸入數字或英文來搜尋都沒問題,但若輸入中文字來搜尋,就沒法搜尋囉!這是因為其中有欄位類型是『日期類型』所致吧!
※改成如下就可解決此問題了!以下為笨兔胡亂摸索出來的,若有錯誤或有更好更正確的方法,請自行更正唄!(笨兔小站中的『遊戲攻略』搜尋就如此寫法唄!^^)
<?php
$sql = "SELECT * FROM test WHERE t_name LIKE '%{$_GET['search']}%' OR DATE_FORMAT(t_date,'%Y-%m-%d') LIKE '%{$_GET['search']}%'";
$rs = $conn -> prepare($sql);
$rs -> execute();
?>
※笨兔是把日期類型的欄位 t_date 用 DATE_FORMAT() 函數抓取出來重新排列成和原來一樣的資料,變成非『日期類型』的資料型態唄!
※如第一筆 t_date 的日期為 2019-06-20,則為 DATE_FORMAT(2019-06-20,'%Y-%m-%d') 所重新排列後的資料為非『日期類型』的資料 2019-06-20。
※若您的日期顯示法為 2019/06/20,則 DATE_FORMAT(2019-06-20,'%Y/%m/%d') 即可。
※若還有顯示時間則自行參閱相關參數,以下為較常用的,有分大小寫哦!其它參數就自行趴文囉!
%Y : 年 (西元4位數)
%m : 月 (00-12)
%d : 日 (00-31)
%H : 時 (00-23)
%h : 時 (01-12)
%i : 分 (00-59)
%s : 秒 (00-59)