顯示具有 SQLite 標籤的文章。 顯示所有文章
顯示具有 SQLite 標籤的文章。 顯示所有文章

2025年11月26日 星期三

[筆記][PHP8][sql plugin][qlite-integration]插件調整

  •  情境:目前php升級到8.2,但我使用的wordpress plugin不支援了。
    • sqlite-integration
    • 目前透過AI 幫我升級調整。
  • 以下是異動紀錄:只調整PHP,轉PHP8語法。
  • 有興趣可以參考看看:

- [V] `sqlite-integration.php` - change log: 移除錯誤抑制 `@file_exists`,改用 `file_exists()` 檢查;將過時的 `get_currentuserinfo()` 改為 `wp_get_current_user()`;修正 `wp_enqueue_script` 的依賴參數為陣列格式;提高 PHP8 相容性。 - [V] `schema.php` - change log: 初始化 `$index_queries` 以避免未定義變數;改進 PDO 例外處理,使用 `getMessage()` 作為後備並在使用 `errorInfo` 前做檢查;在回滾前檢查是否在 transaction 中;強化對資料庫鎖定情況的處理。 - [V] `query_create.class.php` - change log: 初始化回傳陣列 `$return_val` 以避免未定義變數;確保建立索引語句中表名與欄位以空白分隔(修正 `$tbl_name.$col_name` 為 `$tbl_name . ' ' . $col_name`),避免產生連貼語法錯誤;保留原有邏輯並提升穩定性。 - [V] `query_alter.class.php` - change log: 修正 `command_tokenizer()` 中 `$match[2]` 未檢查即使用的問題,改為先檢查並初始化 `$match_2`;修正多處 `stripos()` 參數順序和邏輯以正確檢查字串;在多個 handler (add/drop/modify/change/alter) 中初始化 `$index_queries` 與 `$query`,避免 PHP8 未定義變數警告與不確定行為。 - [V] `query.class.php` - change log: 修正 `defined(WP_DEBUG)` 用法為 `defined('WP_DEBUG')`;修正 `rewrite_regexp()` 的替換字串為 `regexpp($1, $2)`;微調初始化與安全檢查以避免 PHP8 未定義常見警告。 - [V] `pdoengine.class.php` - change log: 修正 `defined(PDO_DEBUG)` 用法為 `defined('PDO_DEBUG')`;初始化 `$_results` 陣列以避免未定義變數;將過時的 `$param{...}` 字元存取改為 `$param[...]`;改善 PHP8 相容性與穩定性;更新 `query()` 方法簽名以符合 PHP8 的 `PDO::query()`(`string $query, ?int $fetchMode = null, mixed ...$fetchModeArgs`)並於 `beginTransaction()`、`commit()` 加入 `#[\ReturnTypeWillChange]` 屬性與明確 bool 回傳以消除相容性警告。 - change log (2025-11-27): 新增 `#[\\ReturnTypeWillChange]` 並讓 `rollBack()` 回傳 `bool`,以消除 PHP8 的 Deprecated 訊息;移除檔案中錯誤插入的重複 `query()` 定義並修正 class/檔頭區塊以解決 parse error。 - [V] `pdodb.class.php` - change log: 使用 `defined('WP_DEBUG') && WP_DEBUG` 檢查以避免未定義常數錯誤;保持原有邏輯但提升 PHP8 相容性。 - [V] `install.php` - change log: 初始化 `$message` 以避免未定義變數回傳;加上括號明確化伺服器類型判斷條件,避免邏輯歧義。 - [V] `index.php` - [V] `functions.php` - change log: 修正 `from_unixtime()` 中錯誤的 `$self` 參照改為 `$this->`;初始化 `deriveInterval()` 中的 `$_parts` 陣列並修正 `day_minute` 與 `day_second` 等子項取用;修正 `inet_aton()` 未定義變數 `$address` 為正確的 `$int_data`;修正 `locate()` 中 `stros` 打字錯誤為 `strpos` 並統一處理 mbstring 與非 mbstring 的情況;在 `field()` 中處理沒有 `.` 的情形以避免 `strpos` 回傳 false 導致的錯誤,提升 PHP8 兼容性。 - [V] `functions-5-2.php` - change log: 同 `functions.php` 的修正(針對 PHP 5.2 版本檔案):修正 `$self->dateformat` 為 `$this->dateformat`;初始化 `$_parts` 並在空時回傳 `false`;修正 `inet_aton()` 使用未定義變數 `$address` 為 `$int_data`;修正 `locate()` 的 `stros` 為 `strpos` 並統一回傳邏輯;修正 `field()` 中沒有 `.` 時的處理,避免 `substr()` 傳入 `false`。 - [V] `db.php` - change log: 增強 `pdo_log_error()` 對 `$_SERVER['SCRIPT_NAME']` 的安全檢查;修正 `sprinf` 為 `sprintf` 並改用 `PHP_VERSION`;修正錯字 `installtion` -> `installation`,提升資訊訊息正確性與穩定性。 - [V] `languages/index.php` - change log: 此檔案為目錄佔位("Silence is golden"),無需修改。 - [V] `styles/index.php` - change log: 此檔案僅為占位("Silence is golden"),無需修改。 - [V] `utilities/patch.php` - change log: 加入 `defined('SQLitePatchDir')` 檢查以避免未定義常數警告;在 `apply_patches()` 中初始化 `$installed_plugin_version`、`$output` 和 `$retval`,並在找不到目標已安裝外掛時回報錯誤,強化錯誤處理與 PHP8 相容性。 - [V] `utilities/index.php` - change log: 此檔案為目錄佔位("Silence is golden"),無需修改。 - [V] `utilities/documentation.php` - change log: 加入 `defined('SQLiteListFile')` 檢查以避免未定義常數警告;保護 `json_decode()` 回傳值,確認為陣列或物件後才遍歷;修正 `stripos()` 比對條件以使用 `!== false`,強化對不合格輸入的容錯處理。 - change log (2025-11-27): 修正模板結尾處混合 PHP/HTML 的標記,補上正確 `` 並確保方法與類正確閉合,解決 parse error 與不當的 `}` 解析問題。 - [V] `js/index.php` - change log: 此檔案為目錄佔位("Silence is golden"),無需修改。 - [V] `utilities/database_maintenance.php` - change log: 加入存在檢查以避免對未定義 table 或空結果造成未定義索引的存取;於 `do_fix_database()` 迴圈中每次處理 table 前重設 `$queries`,避免跨 table 混合查詢;在 `maintenance_backup()` 中加入 `defined('FQDB')` 檢查並保護 `basename()` 的使用,以避免未定義常數錯誤或空值導致的警告;初始化 `$domain` 以避免未定義變數使用。 - [V] `utilities/utility.php` - change log: 加入 `defined()` 檢查以避免對未定義常數(`FQDB`, `FQDBDIR`, `SQLiteListFile`)直接存取;初始化並保護陣列變數(`$collations`, `$options`);在多處使用 `json_decode()` 或 `get_results()` 的回傳前加入有效性檢查;保護檔案操作(`fopen`, `filesize`)以避免 PHP8 的警告或錯誤;微幅修正其他未定義索引/屬性的使用。 --- ## 處理建議(常見 PHP8 問題) - **預設值/型別錯誤**:檢查函式參數型別與回傳型別,若外部呼叫未提供正確型別,請新增明確檢查或轉換。 - **非同步 / 匿名函式行為**:確認 `create_function()` 或過時的匿名函式替代用法。 - **移除 / 棄用的函數**:`each()`, `split()`, `mysql_*` 系列 等需替換。 - **未定義變數與錯誤處理**:PHP8 錯誤級別提升,未定義索引、屬性或版本不同的錯誤會拋例外。 - **數據庫 PDO 使用**:檢查 PDO 連線選項與錯誤處理模式。 還有兩個檔案,可能需要修正:語法返回參數或標籤上的錯誤。 - documentation.php - pdoengine.class.php

2013年4月6日 星期六

Sqlite 設定(C#–Web專案)

image
    • 參考DLL
    • 加入SQLiteHelper
    • 設定web.config
image
原則上設定都跟winform設定差不多。
  • 執行後會發生system.Data.Sqlite 參考的錯誤訊息,這邊提供的解法為:
使用本機IIS Web伺服器的方式瀏覽。
image
  • 執行畫面:(範例為北風資料庫的訂單)

    image
  • 程式碼下載:
打包

2013年3月22日 星期五

Sqlite 設定(C# - Winform專案)

image

  • config設定

image

    • 設定連線字串
    • 設定Provider
  • 連線寫法(EX:ExecuteNonQuery)
  • SQLiteConnection con = new SQLiteConnection(SQLiteHelper.SQLiteConnectionString);
    SQLiteCommand cmd = new SQLiteCommand(commandText, con);

              cmd.CommandType = CommandType.StoredProcedure;
              //cmd.CommandType = CommandType.Text;
              cmd.Parameters.Clear();
              foreach (SQLiteParameter para in paras)
              {
                  cmd.Parameters.Add(para);
              }

              try
              {
                  con.Open();
                  return cmd.ExecuteNonQuery();
              }
              finally
              {
                  con.Close();
              }

  • 谷歌大神上面可見一些Helper範例(EX:SQLiteHelper可以自行參考)
  • 以Winform為例

image

  • 專案在開始偵錯(F5)時候發生錯誤,通常是因為平台目標錯誤,
    如64位元的DLL,目標平台選X86這樣就會發生錯誤,
    這邊可選擇Any CPU或相對應的位元平台。
  • 實作如下:
    • 畫面

image

  • 程式

image

  • 這邊的範例使用sqlite所提供北風資料庫(northwindEF.db,打包在DLL中)
  • 執行結果:

SNAGHTML28518ab