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)