vuongxuongminh / yii2-searchable

Provide simple full-text search for Yii2 Active Record.
BSD 3-Clause "New" or "Revised" License
18 stars 10 forks source link

Invalid parameter number: number of bound variables does not match number of tokens #4

Open justdoitlah opened 4 years ago

justdoitlah commented 4 years ago
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

It seems orderBy params not binding correctly. I am using php 7.4.8 and Yii 2.0.36

echo $aq->createCommand()->getRawSql();

SELECT * FROM node WHERE node.id IN (51344, 69795, 60567, 53169, 23107, 47397, 5610, 71362, 68097, 57207, 55887, 50515, 642, 44730, 6277, 15994, 41786, 9070, 8510, 10365, 19485, 30552, 31459, 39738, 29129, 49595, 51334, 51149, 51138, 50604, 50097, 49766, 49763, 49672, 49042, 49414, 49084, 48983, 48668, 51630, 47748, 47666, 47647, 47556, 47468, 48571, 52569, 51740, 53532, 56119, 55960, 55490, 54769, 54646, 53609, 53607, 53598, 53595, 53506, 51968, 53316, 53124, 52841, 52688, 52641, 52611, 47322, 52304, 52277, 52113, 47417, 46605, 47262, 40403, 41947, 41462, 41424, 41423, 41177, 40879, 40575, 40530, 40442, 40391, 42496, 40050, 39998, 39905, 39902, 39715, 39379, 39111, 39027, 39016, 42400, 42718, 47239, 45423, 46843, 46802) ORDER BY CASE WHEN node.id = :sob1 THEN 1 WHEN node.id = :sob2 THEN 2 WHEN node.id = :sob3 THEN 3 WHEN node.id = :sob4 THEN 4 WHEN node.id = :sob5 THEN 5 WHEN node.id = :sob6 THEN 6 WHEN node.id = :sob7 THEN 7 WHEN node.id = :sob8 THEN 8 WHEN node.id = :sob9 THEN 9 WHEN node.id = :sob10 THEN 10 WHEN node.id = :sob11 THEN 11 WHEN node.id = :sob12 THEN 12 WHEN node.id = :sob13 THEN 13 WHEN node.id = :sob14 THEN 14 WHEN node.id = :sob15 THEN 15 WHEN node.id = :sob16 THEN 16 WHEN node.id = :sob17 THEN 17 WHEN node.id = :sob18 THEN 18 WHEN node.id = :sob19 THEN 19 WHEN node.id = :sob20 THEN 20 WHEN node.id = :sob21 THEN 21 WHEN node.id = :sob22 THEN 22 WHEN node.id = :sob23 THEN 23 WHEN node.id = :sob24 THEN 24 WHEN node.id = :sob25 THEN 25 WHEN node.id = :sob26 THEN 26 WHEN node.id = :sob27 THEN 27 WHEN node.id = :sob28 THEN 28 WHEN node.id = :sob29 THEN 29 WHEN node.id = :sob30 THEN 30 WHEN node.id = :sob31 THEN 31 WHEN node.id = :sob32 THEN 32 WHEN node.id = :sob33 THEN 33 WHEN node.id = :sob34 THEN 34 WHEN node.id = :sob35 THEN 35 WHEN node.id = :sob36 THEN 36 WHEN node.id = :sob37 THEN 37 WHEN node.id = :sob38 THEN 38 WHEN node.id = :sob39 THEN 39 WHEN node.id = :sob40 THEN 40 WHEN node.id = :sob41 THEN 41 WHEN node.id = :sob42 THEN 42 WHEN node.id = :sob43 THEN 43 WHEN node.id = :sob44 THEN 44 WHEN node.id = :sob45 THEN 45 WHEN node.id = :sob46 THEN 46 WHEN node.id = :sob47 THEN 47 WHEN node.id = :sob48 THEN 48 WHEN node.id = :sob49 THEN 49 WHEN node.id = :sob50 THEN 50 WHEN node.id = :sob51 THEN 51 WHEN node.id = :sob52 THEN 52 WHEN node.id = :sob53 THEN 53 WHEN node.id = :sob54 THEN 54 WHEN node.id = :sob55 THEN 55 WHEN node.id = :sob56 THEN 56 WHEN node.id = :sob57 THEN 57 WHEN node.id = :sob58 THEN 58 WHEN node.id = :sob59 THEN 59 WHEN node.id = :sob60 THEN 60 WHEN node.id = :sob61 THEN 61 WHEN node.id = :sob62 THEN 62 WHEN node.id = :sob63 THEN 63 WHEN node.id = :sob64 THEN 64 WHEN node.id = :sob65 THEN 65 WHEN node.id = :sob66 THEN 66 WHEN node.id = :sob67 THEN 67 WHEN node.id = :sob68 THEN 68 WHEN node.id = :sob69 THEN 69 WHEN node.id = :sob70 THEN 70 WHEN node.id = :sob71 THEN 71 WHEN node.id = :sob72 THEN 72 WHEN node.id = :sob73 THEN 73 WHEN node.id = :sob74 THEN 74 WHEN node.id = :sob75 THEN 75 WHEN node.id = :sob76 THEN 76 WHEN node.id = :sob77 THEN 77 WHEN node.id = :sob78 THEN 78 WHEN node.id = :sob79 THEN 79 WHEN node.id = :sob80 THEN 80 WHEN node.id = :sob81 THEN 81 WHEN node.id = :sob82 THEN 82 WHEN node.id = :sob83 THEN 83 WHEN node.id = :sob84 THEN 84 WHEN node.id = :sob85 THEN 85 WHEN node.id = :sob86 THEN 86 WHEN node.id = :sob87 THEN 87 WHEN node.id = :sob88 THEN 88 WHEN node.id = :sob89 THEN 89 WHEN node.id = :sob90 THEN 90 WHEN node.id = :sob91 THEN 91 WHEN node.id = :sob92 THEN 92 WHEN node.id = :sob93 THEN 93 WHEN node.id = :sob94 THEN 94 WHEN node.id = :sob95 THEN 95 WHEN node.id = :sob96 THEN 96 WHEN node.id = :sob97 THEN 97 WHEN node.id = :sob98 THEN 98 WHEN node.id = :sob99 THEN 99 WHEN node.id = :sob100 THEN 100 ELSE 101 END ASC

jtannous commented 2 years ago

Did you manage to solve this? I have the same issue

justdoitlah commented 2 years ago

class OrderBy extends Expression {

/**
 * @inheritDoc
 * @return ExpressionInterface|OrderBy
 */
public function getExpression(): ExpressionInterface {
    $position = 1;
    $cases = ['CASE'];
    $searchableKey = $this->searchableKey ();

    foreach ( $this->ids as $id ) {
        $cases [] = "WHEN {$searchableKey} = $id THEN {$position}";
        $position ++;
    }

    $cases [] = "ELSE {$position}";
    $cases [] = 'END ASC';

    return new DbExpression ( implode ( ' ', $cases ) );
}

}

glpzzz commented 1 year ago

I installed this extension today (Aug, 2023) and I'm having the same issue. Even with latest code (dev-master branch). Is there a solution?