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

Incorrect parsing of WHERE LIKE with parameter

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

還沒有人認領這個 Issue。

評估

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

研究方向

使用提供的 WHERE foo LIKE :bar 範例,從 Parser 的標記化路徑開始,並將其與使用反引號括起的欄位和 = 的情況進行比較。追蹤未加引號的欄位、LIKE 運算子和具名參數為何會被合併,然後新增一個回歸測試,顯示 foo、空白、LIKE、空白和 :bar 是彼此獨立的 token。

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

描述

enhancement kind/support

When trying to parse a WHERE clause such as WHERE foo LIKE :bar it returns foo LIKE : as a single token, where as I would expect it to return foo LIKE :bar as individual tokens. It doesn't have this issue when using back ticks on the columns, or = instead of LIKE.

Sample script:

<?php
require_once __DIR__ . '/vendor/autoload.php';

use PhpMyAdmin\SqlParser\Parser;
use PhpMyAdmin\SqlParser\Token;
use PhpMyAdmin\SqlParser\TokensList;

$sql = 'SELECT * FROM test WHERE foo LIKE :bar';
echo 'sql: ' . $sql . PHP_EOL;
$parser = new Parser($sql);
foreach ($parser->list->tokens as $i => $token) {
    echo 'token: ' . $token->token , PHP_EOL;
}


$sql = 'SELECT * FROM test WHERE `foo` LIKE :bar';
echo 'sql: ' . $sql . PHP_EOL;
$parser = new Parser($sql);
foreach ($parser->list->tokens as $i => $token) {
    echo 'token: ' . $token->token , PHP_EOL;
}

$sql = 'SELECT * FROM test WHERE foo = :bar';
echo 'sql: ' . $sql . PHP_EOL;
$parser = new Parser($sql);
foreach ($parser->list->tokens as $i => $token) {
    echo 'token: ' . $token->token , PHP_EOL;
}

Output:

sql: SELECT * FROM test WHERE foo LIKE :bar
token: SELECT
token:  
token: *
token:  
token: FROM
token:  
token: test
token:  
token: WHERE
token:  
token: foo LIKE :
token: bar
token: 
sql: SELECT * FROM test WHERE `foo` LIKE :bar
token: SELECT
token:  
token: *
token:  
token: FROM
token:  
token: test
token:  
token: WHERE
token:  
token: `foo`
token:  
token: LIKE
token:  
token: :bar
token: 
sql: SELECT * FROM test WHERE foo = :bar
token: SELECT
token:  
token: *
token:  
token: FROM
token:  
token: test
token:  
token: WHERE
token:  
token: foo
token:  
token: =
token:  
token: :bar
token:
主要語言
PHP
星號
485
分支
119
PR 合併指標
30 天內沒有已合併 PR

貢獻指南

開啟貢獻指南

從這裡開始

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

phpmyadmin/sql-parser 的其他 Issue

查看 phpmyadmin/sql-parser 的全部 Issue

相似的 Issue

更多 PHP Issue

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

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