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

推荐阅读
  • 本打算教一步步实现koa-router,因为要解释的太多了,所以先简化成mini版本,从实现部分功能到阅读源码,希望能让你好理解一些。希望你之前有读过koa源码,没有的话,给你链接 ... [详细]
  • 现在越来越多的人使用IntelliJIDEA,你是否想要一个好看的IDEA主题呢?本篇博客教你如何设置一个美美哒IDEA主题,你也可以根据 ... [详细]
  • 本文介绍了 Oracle SQL 中的集合运算、子查询、数据处理、表的创建与管理等内容。包括查询部门号为10和20的员工信息、使用集合运算、子查询的注意事项、数据插入与删除、表的创建与修改等。 ... [详细]
  • 在 Asp.net 应用中,动态加载 DropDownList 控件的数据源是一项常见需求。本文探讨了如何高效地从数据库中获取数据,并实时更新下拉列表,确保用户界面始终与后台数据保持同步。通过使用 ADO.NET 和 LINQ to SQL 技术,开发者可以轻松实现这一功能,同时提高应用的性能和用户体验。文中还提供了代码示例和最佳实践,帮助开发者解决常见的数据绑定问题。 ... [详细]
  • 本文介绍了一种使用SQL Server存储过程来实现基于单一条件的高效分页查询的方法。通过示例代码,详细说明了如何构建和执行这种分页查询。 ... [详细]
  • 解决Visual Studio Code中PHP Intelephense误报问题
    PHP作为一种高度灵活的编程语言,其代码结构可能导致Intelephense插件在某些情况下报告不必要的错误或警告。自1.3.3版本起,Intelephense引入了多个配置选项,允许用户根据具体的工作环境和编程风格调整这些诊断信息的显示。 ... [详细]
  • HTML:  将文件拖拽到此区域 ... [详细]
  • 在Qt框架中,信号与槽机制是一种独特的组件间通信方式。本文探讨了这一机制相较于传统的C风格回调函数所具有的优势,并分析了其潜在的不足之处。 ... [详细]
  • 本文详细介绍了如何在 Node.js 环境中利用 Nodemailer 库实现邮件发送功能,包括环境配置、代码实现及常见问题解决方法。 ... [详细]
  • 文章目录前言Program(程序)Identifier(标识符)Literal(字面量)Vari ... [详细]
  • 本文详细探讨了如何在PHP中有效防止SQL注入攻击,特别是在使用MySQL数据库时。文章通过具体示例和专业建议,帮助开发者理解和应用最佳实践。 ... [详细]
  • URL参数格式http:localhos:8080demo?ab&cd&ef匹配参数a对应的表达式为^a([^&]*)&匹配参数b对应的表达式为&b([^&]*)&匹配参数c对应 ... [详细]
  • 一个建表一个执行crud操作建表代码importandroid.content.Context;importandroid.database.sqlite.SQLiteDat ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
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社区 版权所有