热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PDO混合未命名和命名参数-PDOmixingunnamedandnamedparameters

Imtryingtousethisforabasicsearchwithpagination:我正在尝试使用此分区进行基本搜索:$construct?AND?

I'm trying to use this for a basic search with pagination:

我正在尝试使用此分区进行基本搜索:

$cOnstruct= '? AND ? AND..';

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

The only reason I'm mixing them is because unnamed parameters can't have int values because of a PHP bug apparently: https://bugs.php.net/bug.php?id=44639

我混合它们的唯一原因是因为未命名的参数因为PHP错误而无法具有int值:https://bugs.php.net/bug.php?id = 44639

However if I don't mix them, how can I search for a variable amount of terms using bindings?

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

Update

After messing around with it I solved it more or less using named parameters and some loops:

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

    // 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);

If there's a more optimal way of going about this I'd love to be informed.

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

2 个解决方案

#1


1  

Unnamed parameters can have int values. Just define explicit type in bind function.

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

There can be problem with variables data type. It is good to use intval()function before.

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

Your solution in unnamed data type can look like this:

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

$counter = 0;

//build prepared statement

$query = $database->prepare('SELECT something FROM something WHERE 0 OR '.
implode(' OR ', array_fill(0 , $searchArrayCount, '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), $perPage, PDO::PARAM_INT);

Note I used rather bindValue() before bindParam(). And beware from the first parameter of LIMIT. If the count will be here then the selection will be start on the end of the data and no rows will be returned.

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

#2


0  

Faced to a similar problem, in the end I just skipped bind parameters in the LIMIT clause:

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

sprintf('LIMIT %d, %d', $offset, $size);

Another workaround (if your system supports it) is to switch to native parameter binding. Apparently, it's the emulation layer the one that exhibits this behaviour:

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

$database->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);

推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 本文介绍了贝叶斯垃圾邮件分类的机器学习代码,代码来源于https://www.cnblogs.com/huangyc/p/10327209.html,并对代码进行了简介。朴素贝叶斯分类器训练函数包括求p(Ci)和基于词汇表的p(w|Ci)。 ... [详细]
  • Python中的PyInputPlus模块原文:https ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • C++ STL复习(13)容器适配器
    STL提供了3种容器适配器,分别为stack栈适配器、queue队列适配器以及priority_queue优先权队列适配器。不同场景下,由于不同的序列式 ... [详细]
author-avatar
青岛二三事-丶儿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有