Hacktoberfest 2026:維護者為十月標記出來的 issue,仍然開放、適合新手。 瀏覽 Hacktoberfest issue

Join::join() raises TypeError instead of InvalidArgumentException for an invalid name without a leading string

已關閉
#206 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

維護者通常 2 天內回覆

已經有一個關聯 PR 被合併了。

  • #223 來自 @simon-mundy —— 已合併

評估

難度
2/5
預估耗時
1-3 小時
新手友好度
30/100
Issue 類型
缺陷
描述清晰度
描述清楚
活躍度
停滯
技術堆疊
php, sql
領域
databases

研究方向

Read the validation in src/Sql/Join.php around the referenced line and the forInvalidJoinName() signature in src/Sql/Exception/InvalidArgumentException.php. Check the reported inputs: the call should raise InvalidArgumentException rather than TypeError, and for a non-string element the message should name its type. A linked pull request is already open, so check its status before starting.

由索引模型根據 Issue 內容生成。

描述

bug
Package Version

0.6.x-dev @ e022af5c

Php Version

8.3, 8.4, 8.5

Database Engine

Any

Basic Information

Join::join() rejects a name array that is not a single-element associative array, and passes the array's first element into the message (Join.php#L97):

throw Exception\InvalidArgumentException::forInvalidJoinName(array_shift($name));

forInvalidJoinName() takes a string (InvalidArgumentException.php#L134). When the first element is not a string (an empty array, an unaliased Select, an integer), building the exception raises a TypeError first.

This came in with #192, which replaced sprintf(...) (which accepted any type) with the typed named constructor. #192 notes that the same unsoundness was re-attributed to forInvalidJoinName in the analyzer baseline.

Steps to Reproduce
  1. (new Join())->join([], 'a = b')
  2. (new Join())->join([new Select('foo')], 'a = b')
  3. (new Join())->join([5], 'a = b')
Expected Behavior

PhpDb\Sql\Exception\InvalidArgumentException. Where the element is not a string, the message names its type, e.g. join() expects 'int' as a single element associative array.

Actual behavior?
TypeError: PhpDb\Sql\Exception\InvalidArgumentException::forInvalidJoinName(): Argument #1 ($name) must be of type string, null given, called in src/Sql/Join.php on line 115
主要語言
PHP
星號
18
分支
8
平均合併
2 天 6 小時
30 天內合併 PR
30

環境準備

  • 提供 Dockerfile 或 Docker Compose 檔案
  • 沒有 Pull Request 範本
  • 沒有貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

php-db/phpdb 的其他 Issue

查看 php-db/phpdb 的全部 Issue

相似的 Issue

更多 PHP Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。