Php7適應:修訂版本之間的差異

出自六年制學程
跳轉到: 導覽搜尋
preg_replace的e修飾
 
(未顯示同用戶所作出之6次版本)
第 27 行: 第 27 行:
 
#*table 此欄所屬的表的名稱(如果非演算欄)
 
#*table 此欄所屬的表的名稱(如果非演算欄)
 
#*orgtable 原始表名(如果已指定別名)
 
#*orgtable 原始表名(如果已指定別名)
#*def 此欄的預設值,以字符串表示
+
#*def 文件說可以取回此欄的預設值(以字串表示),實測結果什麼都取不到,應為 PHP 文件上的錯誤或 PHP7 的 bug
 
#*max_length 結果集欄的最大寬度。
 
#*max_length 結果集欄的最大寬度。
 
#*length 在表定義中指定的欄寬度。
 
#*length 在表定義中指定的欄寬度。
 
#*charsetnr 欄的字符集編號。
 
#*charsetnr 欄的字符集編號。
 
#*flags 一個整數,表示該欄的位標誌。
 
#*flags 一個整數,表示該欄的位標誌。
 +
#*# NOT_NULL_FLAG 為 1 ,常數表示為 MYSQLI_NOT_NULL_FLAG
 +
#*# PRI_KEY_FLAG 為 2 ,常數表示為 MYSQLI_PRI_KEY_FLAG
 +
#*# UNIQUE_KEY_FLAG 為 4 ,常數表示為 MYSQLI_UNIQUE_KEY_FLAG
 +
#*# MULTIPLE_KEY_FLAG 為 8 ,常數表示為 MYSQLI_MULTIPLE_KEY_FLAG
 +
#*# BLOB_FLAG 為 16 ,常數表示為 MYSQLI_BLOB_FLAG
 +
#*# UNSIGNED_FLAG 為 32 ,常數表示為 MYSQLI_UNSIGNED_FLAG
 +
#*# ZEROFILL_FLAG 為 64 ,常數表示為 MYSQLI_ZEROFILL_FLAG
 +
#*# BINARY_FLAG 為 128 ,PHP7有此全域常數,表示為 MYSQLI_BINARY_FLAG
 +
#*# ENUM_FLAG 為 256 ,PHP7有此全域常數,表示為 MYSQLI_ENUM_FLAG
 +
#*# AUTO_INCREMENT_FLAG 為 512 ,常數表示為 MYSQLI_AUTO_INCREMENT_FLAG
 +
#*# TIMESTAMP_FLAG 為 1024 ,常數表示為 MYSQLI_TIMESTAMP_FLAG
 +
#*# SET_FLAG 為 2048 ,常數表示為 MYSQLI_SET_FLAG
 +
#*# NO_DEFAULT_VALUE_FLAG 為 4096 ,PHP7有此全域常數,表示為 MYSQLI_NO_DEFAULT_VALUE_FLAG
 +
#*# ON_UPDATE_NOW 為 8192 ,PHP7有此全域常數,表示為 MYSQLI_ON_UPDATE_NOW_FLAG
 +
#*# PART_KEY_FLAG 為 16384 ,常數表示為 MYSQLI_PART_KEY_FLAG
 +
#*# GROUP_FLAG 與 NUM_FLAG 均為 32768 ,常數表示為 MYSQLI_GROUP_FLAG 、 MYSQLI_NUM_FLAG
 +
#*:要閱讀其含義,可以二進制顯示它,如:decbin(49967);顯示出'1100001100101111'(從右向左讀共 16 bits)。
 +
#*:要測是否具有某種 flag ,可以用 if($fieldFlags & 代表常數){…} 測試它,成立就有此 flag 。
 
#*type 用於此欄的數據類型
 
#*type 用於此欄的數據類型
 +
#*# 1=>'tinyint'
 +
#*# 2=>'smallint'
 +
#*# 3=>'int'
 +
#*# 4=>'float'
 +
#*# 5=>'double'
 +
#*# 7=>'timestamp'
 +
#*# 8=>'bigint'
 +
#*# 9=>'mediumint'
 +
#*# 10=>'date'
 +
#*# 11=>'time'
 +
#*# 12=>'datetime'
 +
#*# 13=>'year'
 +
#*# 16=>'bit'
 +
#*# 252 MySQL 5.0.51a 之後被對應到所有的 text 與 blob 欄
 +
#*# 253=>'varchar'
 +
#*# 254=>'char'
 +
#*# 246=>'decimal'
 
#*decimals 使用的小數位數(用於數字欄)
 
#*decimals 使用的小數位數(用於數字欄)
 
#mysqli_fetch_field() - 返回結果集中的下一個欄
 
#mysqli_fetch_field() - 返回結果集中的下一個欄
 
#mysqli_fetch_fields() - 返回表示結果集中欄的物件陣列
 
#mysqli_fetch_fields() - 返回表示結果集中欄的物件陣列
 
#mysqli_data_seek($result,跳過幾筆):調整結果指針到結果集中的一個任意行
 
#mysqli_data_seek($result,跳過幾筆):調整結果指針到結果集中的一個任意行
 +
 
===etable 對 mysqli_query 引數中連結在前的適應===
 
===etable 對 mysqli_query 引數中連結在前的適應===
 
====(一)新增 login 類別兩個屬性====
 
====(一)新增 login 類別兩個屬性====

2022年2月15日 (二) 22:09的最新修訂版本

資料庫

  1. $conn = mysqli_connect($DBHOST, $DBUSER, $DBPASSWD):建立資料庫連線,如果$conn=false代表連結不成功
  2. mysqli_select_db($conn, $DBNAME):選取資料庫
  3. $result = mysqli_query($conn, $sql):查詢
    • SELECT, SHOW, DESCRIBE, EXPLAIN 等如果成功則取回 resultset ,否則為 false
    • INSERT, UPDATE, DELETE, DROP 等成功則傳回 true,否則為 false
  4. mysqli_connect_errno($conn):傳回連結資料庫的錯誤碼。如果沒有錯誤發生則返回 0。
  5. mysqli_connect_error():傳回連結錯誤的原因,如「Access denied for user 'root'@'localhost' (using password: YES)」。注意:因連結沒有成功,所以引數中不是連結,而是無引數。
  6. mysqli_errno($conn):傳回查詢指令的錯誤碼。如果沒有錯誤發生則返回 0。
  7. mysqli_error($conn):傳回查詢指令的錯誤訊息。
    • 錯誤碼列表,進一步點進去可以看錯誤碼與錯誤訊息列表。
  8. mysqli_num_rows($result):取回結果中的筆數
  9. mysqli_num_fields($result):獲取結果中的欄數
  10. mysqli_fetch_assoc($result):同mysqli_fetch_array(result,MYSQLI_ASSOC)
  11. mysqli_fetch_row($result):同mysqli_fetch_array(result,MYSQLI_NUM)
  12. mysqli_fetch_array(result[,resulttype]):取代 mysql_fetch_array 。resulttype預設為 MYSQLI_BOTH ,另二值為 MYSQLI_ASSOC,MYSQLI_NUM 。
  13. $obj = mysqli_fetch_object($result):取回物件形態資料
  14. mysqli_insert_id($conn):取回最後一筆異動的索引
    • 一定要有一個欄位有 auto_increment 屬性,否則回傳0
    • 一定之前要有insert或update操作,否則回傳0
  15. mysqli_free_result($result):釋放結果集
  16. mysqli_close($con):關閉連線,繳回連結
  17. mysqli_fetch_field_direct($result,第幾欄):返回一個物件,包含來自指定結果集中的欄位定義信息。沒有指定第幾欄,則返回FALSE。諸屬性:
    • name 欄代名
    • orgname 原始欄名(如果指定了別名)
    • table 此欄所屬的表的名稱(如果非演算欄)
    • orgtable 原始表名(如果已指定別名)
    • def 文件說可以取回此欄的預設值(以字串表示),實測結果什麼都取不到,應為 PHP 文件上的錯誤或 PHP7 的 bug
    • max_length 結果集欄的最大寬度。
    • length 在表定義中指定的欄寬度。
    • charsetnr 欄的字符集編號。
    • flags 一個整數,表示該欄的位標誌。
      1.  NOT_NULL_FLAG 為 1 ,常數表示為 MYSQLI_NOT_NULL_FLAG
      2.  PRI_KEY_FLAG 為 2 ,常數表示為 MYSQLI_PRI_KEY_FLAG
      3.  UNIQUE_KEY_FLAG 為 4 ,常數表示為 MYSQLI_UNIQUE_KEY_FLAG
      4.  MULTIPLE_KEY_FLAG 為 8 ,常數表示為 MYSQLI_MULTIPLE_KEY_FLAG
      5.  BLOB_FLAG 為 16 ,常數表示為 MYSQLI_BLOB_FLAG
      6.  UNSIGNED_FLAG 為 32 ,常數表示為 MYSQLI_UNSIGNED_FLAG
      7.  ZEROFILL_FLAG 為 64 ,常數表示為 MYSQLI_ZEROFILL_FLAG
      8.  BINARY_FLAG 為 128 ,PHP7有此全域常數,表示為 MYSQLI_BINARY_FLAG
      9.  ENUM_FLAG 為 256 ,PHP7有此全域常數,表示為 MYSQLI_ENUM_FLAG
      10.  AUTO_INCREMENT_FLAG 為 512 ,常數表示為 MYSQLI_AUTO_INCREMENT_FLAG
      11.  TIMESTAMP_FLAG 為 1024 ,常數表示為 MYSQLI_TIMESTAMP_FLAG
      12.  SET_FLAG 為 2048 ,常數表示為 MYSQLI_SET_FLAG
      13.  NO_DEFAULT_VALUE_FLAG 為 4096 ,PHP7有此全域常數,表示為 MYSQLI_NO_DEFAULT_VALUE_FLAG
      14.  ON_UPDATE_NOW 為 8192 ,PHP7有此全域常數,表示為 MYSQLI_ON_UPDATE_NOW_FLAG
      15.  PART_KEY_FLAG 為 16384 ,常數表示為 MYSQLI_PART_KEY_FLAG
      16.  GROUP_FLAG 與 NUM_FLAG 均為 32768 ,常數表示為 MYSQLI_GROUP_FLAG 、 MYSQLI_NUM_FLAG
      要閱讀其含義,可以二進制顯示它,如:decbin(49967);顯示出'1100001100101111'(從右向左讀共 16 bits)。
      要測是否具有某種 flag ,可以用 if($fieldFlags & 代表常數){…} 測試它,成立就有此 flag 。
    • type 用於此欄的數據類型
      1.  1=>'tinyint'
      2.  2=>'smallint'
      3.  3=>'int'
      4.  4=>'float'
      5.  5=>'double'
      6.  7=>'timestamp'
      7.  8=>'bigint'
      8.  9=>'mediumint'
      9.  10=>'date'
      10.  11=>'time'
      11.  12=>'datetime'
      12.  13=>'year'
      13.  16=>'bit'
      14.  252 MySQL 5.0.51a 之後被對應到所有的 text 與 blob 欄
      15.  253=>'varchar'
      16.  254=>'char'
      17.  246=>'decimal'
    • decimals 使用的小數位數(用於數字欄)
  18. mysqli_fetch_field() - 返回結果集中的下一個欄
  19. mysqli_fetch_fields() - 返回表示結果集中欄的物件陣列
  20. mysqli_data_seek($result,跳過幾筆):調整結果指針到結果集中的一個任意行

etable 對 mysqli_query 引數中連結在前的適應

(一)新增 login 類別兩個屬性

$dsn
$sqlConnection

(二)提供可用的資料庫連線帳密

  1. 由域名決定:在 constant.php 中一個域名對應一個 DSN 常數
  2. 在 site 中決定:在 siteConstant.php 中指定 $themeDsn 與 $loginDsn
  3. 在工作程式中指定,直接使用字串

(三)連結時機

  1. siteConstant.php:同 site 皆使用相同的資料庫連結,不管有 theme 還是沒 theme
  2. theme.php ,由於各工作程式和 index.php 會載入 theme.php ,所以就不用再進行連結。

(四)DB::queryF

(五)site專一

在 siteConstant.php 中有 signInTable 常數指定認證資料表

ereg_replace被preg_replace取代

ereg_replace("正規表示式", 取代字串, 被蒐尋字串)
// 修改後應為:
preg_replace("/正規表示式/",取代字串,被蒐尋字串)

「/」代表樣式開始及樣式結束

preg_replace的e修飾

/et/class/wiki/Sanitizer.php 的 565 行

原:
$stripped = preg_replace( '!\\\\([0-9A-Fa-f]{1,6})[ \\n\\r\\t\\f]?!e',
'codepointToUtf8(hexdec("$1"))', $stripped );

先註解掉,以後再改。