当前位置: 首页 > 面试题库 >

PHP PDO bindParam用于``泪N''陈述式的变数/字串?

胡元明
2023-03-14
问题内容

好吧,这真的让我感到困扰。如何在PHP的PDO中为SQL“ IN”语句绑定参数(具有多个值)?

这是基础知识…

$allow = "'red', 'blue'";

SELECT * FROM colors WHERE type IN (:allow);

$stmt->bindParam(':allow', $allow);

当我自己插入$ allow时,这很好用,但是当尝试绑定它并使用:allow时,它将无法工作。有人知道为什么吗?

注意:我确实将其余的PDO设置为与其他变量(不是字符串)一起正常工作,我只是没有包括它,因为它是不必要的。

任何帮助表示赞赏,谢谢。


问题答案:

在评论中,德塞兹所说的是正确的。这是我以前做过的方法。

基本上,您可以IN通过循环数组值并添加绑定名称来创建sql字符串的一部分。

$allow = array( 'red', 'blue' );

$sql = sprintf(
    "Select * from colors where type in ( %s )",
    implode(
        ',',
        array_map(
            function($v) {
                static $x=0;
                return ':allow_'.$x++;
            },
            $allow
        )
    )
);

这导致 Select * from colors where type in ( :allow_0,:allow_1 )

然后只需循环$allow数组并使用bindValue绑定每个变量。

foreach( $allow as $k => $v ){
    $stmnt->bindValue( 'allow_'.$k, $v );
}

我在意识到与一个给出类似示例的问题相关联的降序之前添加了此内容。我将其留在这里是因为它显示了如何使用命名的绑定变量而不是?s来完成此操作。



 类似资料:
  • 问题内容: 我想从表中选择一些行,这些行具有某些在编写存储过程时尚不知道的值。例如,在图书馆数据库中搜索特定类型的书籍: 凡我想成为一个运行,也许下一个,这取决于用户的选择。如何在运行时更改表达式? 不幸的是,我仍然有很多关于SQL的知识,并且不确定我是否在问一个有意义的问题。我将不胜感激! 问题答案: 这比您在SQL Server 2005中可能想像的要棘手(2008具有表值参数,这使其更容易)

  • 问题内容: 更有效的方法是- 在sql中使用case语句处理,或在代码中使用if语句处理相同的数据。我问是因为我的同事有一个很大的查询,其中包含许多案例陈述。我建议她通过编写case语句来减轻数据库的压力。我发现它更有效…但是为什么呢? 问题答案: 这里没有一个更基本的问题:这些语句实际上在做什么? 一分钟忘了表演。如果仅用于转换查询的最终输出,并且实际上可以用或在ASP中替换相同的功能,则可能意

  • 问题内容: 这个问题已经在这里有了答案 : 10年前关闭。 可能的重复: “ else if”是否比“ switch()case”更快? Java中if / else与switch语句的相对性能差异是什么? 我知道case语句可以用跳转表实现。这是否使它们比if语句更有效? 只是应该避免这种微观优化吗? 问题答案: 我认为主要是尽可能清楚地编写代码。 这样的微优化不应该成为重点。 例如,如果您有这

  • 问题内容: 我有一个数据库表’ tbl_transaction ‘,其定义如下: 我想生成两列:和。 是否可以仅使用SQL查询有条件地填充列,以使输出显示在正确的列中,具体取决于它是费用项目还是收入项目? 例如: 我正在使用MySQL作为数据库。我正在尝试使用CASE语句来完成此任务。 干杯! 问题答案: 是的,像这样: 正如其他答案所指出的那样,MySQL还具有使用较少冗长语法的功能。我通常尝试

  • 问题内容: 有没有一种方法来定义像新语句,,我自己在Python的?当然,我并不是要覆盖现有的语句,而只是创建自己的语句。 如果是这样,我该怎么办?您能指出我有关该主题的好文档吗? 问题答案: 不可以,您不能在Python程序中添加新语法。更改语言的唯一方法是编辑并重新编译语法文件和支持C代码,以获得新的更改后的解释器,编译器和运行时。

  • 问题内容: 所以我有一个先前的问题,但意识到我发布了错误的违规代码。我在下面标记了令人反感的陈述。 我正在尝试使用该switch语句为每个运算符设置优先级。 也许有人可以指出我正确的方向。 请注意,我正在运行JAVA 7,因此String Switch可以工作。 码 opType.java Operator.java 问题答案: 如果您放置了,则该函数会在执行之前返回,因此将永远无法达到。 相反,