PDO 混合未命名和命名参数

Aku*_*uta 5 php pdo

我正在尝试使用它进行基本的分页搜索:

$construct = '? AND ? AND..';

$query = $database->prepare('SELECT * FROM something WHERE something LIKE ' . $construct . ' LIMIT :offset, :results');
Run Code Online (Sandbox Code Playgroud)

我混合它们的唯一原因是因为明显的 PHP bug,未命名的参数不能有 int 值:https://bugs.php.net/bug.php ?id=44639

但是,如果我不混合它们,如何使用绑定搜索可变数量的术语?

更新

在搞乱它之后,我或多或少地使用命名参数和一些循环解决了它:

    // build prepared statement
    $construct = '';
    for ($x = 0; $x <= $searchArrayCount; $x++) {
        $construct .= ($x < $searchArrayCount)
                    ? ":var$x OR name LIKE "
                    : ":var$x LIMIT :start, :perPage";
    }

    $query = $database->prepare('SELECT something FROM something WHERE name LIKE ' . $construct);

    // bind parameters
    for ($x = 0; $x <= $searchArrayCount; $x++) {
        $searchArray[$x] = "%$searchArray[$x]%";
        $query->bindParam(":var$x", $searchArray[$x]);
    }

    $query->bindParam(':start', $searchArrayCount, PDO::PARAM_INT);
    $query->bindParam(':perPage', $perPage, PDO::PARAM_INT);
Run Code Online (Sandbox Code Playgroud)

如果有更优化的方法来解决这个问题,我很乐意被告知。

Álv*_*lez 0

面对类似的问题,最后我只是跳过了 LIMIT 子句中的绑定参数:

sprintf('LIMIT %d, %d', $offset, $size);
Run Code Online (Sandbox Code Playgroud)

另一种解决方法(如果您的系统支持)是切换到本机参数绑定。显然,模拟层表现出了这种行为:

$database->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
Run Code Online (Sandbox Code Playgroud)