加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – PDO混合未命名和命名参数

发布时间:2020-12-13 22:34:07 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试使用此分区进行基本搜索: $construct = '? AND ? AND..';$query = $database-prepare('SELECT * FROM something WHERE something LIKE ' . $construct . ' LIMIT :offset,:results'); 我混合它们的唯一原因是因为未命名的参数不能具有int值,因为
我正在尝试使用此分区进行基本搜索:

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

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

我混合它们的唯一原因是因为未命名的参数不能具有int值,因为显然存在PHP错误: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);

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

解决方法

未命名的参数可以具有int值.只需在bind函数中定义显式类型即可.

变量数据类型可能存在问题.之前使用intval()函数是很好的.

您在未命名数据类型中的解决方案可能如下所示:

$counter = 0;

//build prepared statement

$query = $database->prepare('SELECT something FROM something WHERE 0 OR '.
implode(' OR ',array_fill(0,'name LIKE ?')).
        ' LIMIT ?,?');

// bind parameters
foreach($searchArray as $value)
{
    $counter++;
    $query->bindValue($counter,('%'.$value.'%'),PDO::PARAM_STR);
}

$query->bindValue(($counter+1),($page*$perPage),PDO::PARAM_INT);
$query->bindParam(($counter+2),PDO::PARAM_INT);

注意我在bindParam()之前使用了bindValue().请注意LIMIT的第一个参数.如果计数将在此处,则选择将从数据末尾开始,并且不返回任何行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读