⑴ 關於php獲取POST數據時判斷數據類型的問題
如果我沒記錯的話,post都是方式都會轉為字元串類型,所以你判斷類型時應該在輸入的時候就判斷
⑵ php怎麼接收json類型數據
PHP接收JSON格式的數據
在API服務中,目前流行採用json形式來交互。
給前端調用的介面輸出Json數據,這個比較簡單,只需要組織好數據,用json_encode($array) 轉化一下,前端就得到json格式的數據。
接收前端提交的json數據稍微復雜一點,原因是:PHP默認識別的數據類型是application/x-www.form-urlencoded標準的數據類型。因此,對型如text/xml 或者 soap 或者 application/octet-stream 和application/json格式之類的內容無法解析,如果用$_POST數組來接收就會失敗!
此時可以使用$GLOBALS['HTTP_RAW_POST_DATA'] 或 file_get_contents('php://input') 來獲取提交的數據
查看手冊,可以發現$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST的區別:
$_POST:通過 HTTP POST 方法傳遞的變數組成的數組,是自動全局變數。
$GLOBALS['HTTP_RAW_POST_DATA'] :總是產生 $HTTP_RAW_POST_DATA 變數包含有原始的 POST 數據。此變數僅在碰到未識別 MIME 類型的數據時產生。$HTTP_RAW_POST_DATA 對於 enctype="multipart/form-data" 表單數據不可用。也就是說基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是一樣的。但是如果post過來的數據不是PHP能夠識別的,你可以用 $GLOBALS['HTTP_RAW_POST_DATA']來接收,比如 text/xml 或者 soap 等等。
補充說明:PHP默認識別的數據類型是application/x-www.form-urlencoded標準的數據類型。
⑶ php mysql的問題。我在mysql存的欄位類型為int ,為什麼在php 取出來變成string 類型。
不用強制轉換
因為php是弱類型
所以 就算是你認為是string類型的數據,當你需要它是int的時候,php就會把它處理成int。
舉個例子吧
假如你mysql存了一個char類型的「10」
然後 賦給了$a;
再後 print($a+1);
結果會是11。
即是說php根本不在乎它是何種類型。
如果你希望得到101這種結果你應該寫 print($a.'1');
⑷ php mysql 獲取結果集的問題
首先看傳入的參數:第一個是resource類型的結果集,是mysql_query($sql)的返回值,第二個則是傳入SQL語句。參數類型不一樣。
再看函數體:mysql_fetch_assoc($result)接受的傳入類型是resource類型,他有兩種返回值的可能,一種是如果結果集存在行記錄,則返回一行記錄,是關聯數組類型的。如果沒有行記錄,即查詢結果為空,則返回布爾類型的false。
看第一種方法,while()循環是當判斷條件為true時執行,就是如果mysql_fetch_assoc($result)沒有返回false,即有資料庫查詢後有行記錄,就會把在循環體中把返回值$rs添加到數組$row中,$row將會是二維數組,鍵是int類型的0,1,2.。。。
而你說的第二個getOne()將只能返回一行查詢記錄,如果沒有記錄,將會返回false。
你可以用print_r()列印出getOne和getAll()的結果。
比如資料庫存在是id=1,name=aa ;id=2,name=bb兩條記錄,則getAll()列印出的是
Array([0]=>Array('id'=>1,'name'=>'aa'),[1]=>Array('id'=>2,'name'=>'bb'))
getOne列印出的是Array('id'=>1,'name'=>'aa')[我初學PHP,不排除分析錯誤]
⑸ php讀取excel
在日常開發,尤其是管理後台的構建中,我們常會遇到導入Excel文件進行批量數據操作以及將數據導出到Excel的場景。本篇將分享個人在開發過程中總結的PHP讀取Excel的方法和需要注意的關鍵點。
讀取Excel的過程主要分為接收文件、解析文件、數據處理和返回結果四個步驟。由於導入文件的自由度相對較高,伺服器可能接收到各種形式的文件,因此數據的有效性校驗尤為重要。此外,由於Excel導入文件通常涉及大量數據的批量操作,處理好頁面超時、伺服器內存溢出和容錯機制變得極為關鍵。
導入Excel的步驟如下:
1. 接收和校驗文件:通過校驗上傳文件的MIME類型和大小,確保用戶上傳的文件格式有效且沒有超過伺服器處理能力。這可以預防伺服器內存溢出的問題。
2. 校驗空表:在Excel編輯過程中,用戶可能刪除整行的每個單元格,導致留下一些空行。系統應進行過濾,僅保留包含數據的行。
3. 校驗數據行:根據伺服器處理能力和業務復雜性,限制允許的數據行數,避免導致伺服器內存溢出或頁面超時問題。同時,適當調整伺服器處理Excel文件的超時和內存限制。
4. 校驗空欄位:檢查系統需要的欄位是否為空。系統可能不需要讀取所有列,因此需要進行非空檢查。
5. 校驗數據格式:按業務需求校驗欄位的類型、長度等信息。
6. 去重:根據業務需求進行數據行的去重或報錯。
7. 類型轉換、XSS過濾和數據處理:經過前面的步驟,確保數據的有效性後,對數據進行預處理,使其符合操作介面的要求。
8. 數據有效性校驗:對數據進行與業務相關的校驗,如商品修改前查詢商品是否存在,訂單發貨前查詢訂單是否存在等。
9. 調用介面:通過調用介面進行業務操作,如果介面不能一次性處理所有數據,需分批循環調用介面,並注意介面的頻率限制。
10. 結果處理和異常處理:根據介面返回的信息,組裝成適當的數據格式,提示用戶哪些數據操作成功、失敗及其原因。
在處理Excel文件時,還需注意以下幾點:
1. 科學計數法:Excel編輯軟體通常會將大數字顯示為科學計數法,這對系統來說是不合法的數據格式。系統應允許這種格式,並將其轉換為正確的數據,但需確保轉換結果准確。
2. 超時和內存溢出:進行批量操作時,可能遇到頁面超時或伺服器內存溢出的問題。通過設置超時時間、內存限制,並進行實際測試,以避免這些問題。
3. 空白單元格:用戶上傳的Excel文件可能看似行數較少,但實際內存溢出是因為單元格格式修改導致的無用信息。可以將原文件內容粘貼到新文件中,以去除無用信息。
對於處理大量數據的場景,以下提供了優化方案:
1. 非同步任務:將表格解析任務分解為多個非同步操作,服務端返回結果到前端頁面,頁面自動查詢操作狀態,避免頁面超時,同時用戶可以繼續其他操作。
2. 分多次請求:上傳文件後,服務端解析Excel文件數據,解析完成後返回頁面或暫存到Redis,前端頁面循環發送請求處理數據。
3. 使用CSV格式:將Excel轉換為CSV,可以顯著減少伺服器內存的消耗,提高系統處理大量數據的能力。
總結,通過上述步驟和策略,可以高效地使用PHP讀取和處理Excel文件,同時確保數據安全性和操作效率。