热门标签 | 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);

推荐阅读
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍了如何在具备多个IP地址的FTP服务器环境中,通过动态地址端口复用和地址转换技术优化网络配置。重点讨论了2Mb/s DDN专线连接、Cisco 2611路由器及内部网络地址规划。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
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社区 版权所有