diff --git a/src/Medoo.php b/src/Medoo.php index 8aa434a0..e0f690e0 100644 --- a/src/Medoo.php +++ b/src/Medoo.php @@ -1034,6 +1034,14 @@ protected function dataImplode(array $data, array &$map, string $conjunctor): st } elseif ($operator === 'REGEXP') { $stack[] = "{$column} REGEXP {$mapKey}"; $map[$mapKey] = [$value, PDO::PARAM_STR]; + } elseif ($operator === 'FIND_IN_SET') { + $mapKey = $this->mapKey(); + $stack[] = "FIND_IN_SET({$mapKey}, {$column})"; + if (is_array($value)) { + $map[$mapKey] = [implode(',', $value), PDO::PARAM_STR]; + } else { + $map[$mapKey] = [$value, PDO::PARAM_STR]; + } } else { throw new InvalidArgumentException("Invalid operator [{$operator}] for column {$column} supplied."); } diff --git a/tests/SelectTest.php b/tests/SelectTest.php index d718c691..467ca4b0 100644 --- a/tests/SelectTest.php +++ b/tests/SelectTest.php @@ -712,4 +712,30 @@ public function testSelectWithSingleCharacter($type) $this->database->queryString ); } + + /** + * @covers ::select() + * @covers ::selectContext() + * @covers ::isJoin() + * @covers ::columnMap() + * @covers ::columnPush() + * @dataProvider typesProvider + */ + public function testFindInSet($type) + { + $this->setType($type); + + + $this->database->select("table", 'column', [ + "column[FIND_IN_SET]" => ["values", "values_two"] + ]); + + $this->assertQuery( + <<database->queryString + ); + } + }