php版本兼容的坑,php8兼容性

本文目錄一覽:

如何避免ThinkPHP的兩個坑

public function createProblems(){

$problems = I(‘json.’);

if (empty($problems)) {

$this-error($problems, ‘json格式不符合規範’);

}

foreach ($problems as $problem) {

$data = D(‘Problem’)-create($problem, self::OP_INSERT);

if (!$data) {

$this-error($problem, D(‘Problem’)-getError());

}

$temp[] = $data;

}

$ret = D(‘Problem’, ‘Service’)-addProblems($temp);

if ($ret === false) {

$this-error(null, ‘導入失敗’);

}

$this-success(null);

}

接口完成的功能是批量創建問題,參數為json數組,addProblem()方法中就是一個addAll操作。

第一個坑-自動填充

使用自動填充可能會覆蓋表單提交項目。其目的是為了防止表單非法提交字段。使用Model類的create方法創建數據對象的時候會自動進行表單數據處理。

官方文檔明確說了自動填充會覆蓋表單,所以即使你post過來的參數中給出了具體數值,使用create方法之後也可能會被覆蓋。千萬注意!!!

第二個坑-addAll方法

addAll方法中不能出現null值,否則其他數據會自動向前移動,導致添加失敗。舉例:

[

{

“appId”: 1,

“serviceId”: 2,

“createUser”:null,

“status”: 1,

“priority”: 2

}

]

其中,createUser字段為null,插入時的sql語句會變成insert into va_problem (appId, serviceId, createUser, status, priority)values (1, 2, 1, 2)。null值沒了,導致插入失敗,這應該是ThinkPHP3.2.3的一個bug。這篇博客有相關的討論。

引入坑的過程

problemModel裡面有對createUser做自動填充。

通過api創建問題時,首先自動填充會覆蓋,所以表單中的createUser值失效,這是第一個坑。然後,由於自動填充createUser調用的是get_username()函數,通過api調用時,session(username)取不到值,所以create之後字段變成”createUser”:null,引入了第二個坑。

THINKPHP項目的一些坑

當我們設置input type=”text/ display:block時,其寬度並不等於父元素的100%,而是需要我們手動設置width=100%;

{:C(“IP_URL”)}會調用Common下Conf里config.php的自定義變量

結論:IS_POST好用,IS_GET不好用,可以用count($_GET)來替代

PHP中不區分NUL null

兩個表連接 -join(“B on A.xx=B.xx”) √

三個表連接 -join(“inner join B on A.xx=B.xx join C on A.xx=C.xx”) √

-join(“inner join B on A.xx=B.xx inner join C on A.xx=C.xx”) √

mysql-php-視圖層

mysql中整形字段—》php接收為 字符串—》模板中又為number

ecshop 與php5.4兼容性上會出現什麼問題

是會有問題的,php5.4裡面會拋棄掉一些5.3的函數,所以ecshop的2.7.3版本在php5.4下面用的話會有一些不兼容,不過現在ecshop出3.0版本了,直接兼容到php5.6,模板堂官方對外免費使用的模板也都兼容5.6了,您可以去下載安裝用下

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/219914.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-09 11:02
下一篇 2024-12-09 11:02

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Git secbit:一種新型的安全Git版本

    Git secbit是一種新型的安全Git版本,它在保持Git原有功能的同時,針對Git存在的安全漏洞做出了很大的改進。下面我們將從多個方面對Git secbit做詳細地闡述。 一…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 如何將Java項目分成Modules並使用Git進行版本控制

    本文將向您展示如何將Java項目分成模塊,並使用Git對它們進行版本控制。分割Java項目可以使其更容易維護和拓展。Git版本控制還可以讓您跟蹤項目的發展並協作開發。 一、為什麼要…

    編程 2025-04-28
  • Python的版本演變

    Python是一門非常流行的編程語言,它有着簡潔、易讀、易寫的特點。自1991年由Guido van Rossum發明以來,Python已經發展成為一個成熟的編程語言,擁有多個版本…

    編程 2025-04-28
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • librosa版本用法介紹

    librosa是一個用於音頻信號處理的python庫,具有多種處理音頻的功能。在librosa庫中,版本號非常重要,在不同的版本中可能會存在一些差異。本文將圍繞librosa的版本…

    編程 2025-04-28
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若服務器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • Java多版本支持實現方式

    本文將從以下幾個方面闡述如何實現Java多版本支持,並給出可行的代碼示例。 一、多版本Java環境概述 Java是一門跨平台的編程語言,但是在不同的應用場景下,可能需要使用不同版本…

    編程 2025-04-27
  • Taro3.5.11版本微信小程序端v-html依然無法解析video為中心的問題解決方案

    該問題的解決是通過使用 Taro3.5.11 版本自定義組件進行處理,具體解決方案如下: 一、自定義組件 首先,我們需要創建一個自定義組件 VideoComponent,該組件的主…

    編程 2025-04-27

發表回復

登錄後才能評論