【问题标题】:PHP PDO Prepared Statements with IN and WHERE Operators带有 IN 和 WHERE 运算符的 PHP PDO 准备语句
【发布时间】:2016-12-16 04:46:01
【问题描述】:

我是 PDO 的新手(来自 mysqli),我一直在寻找几个小时,似乎无法弄清楚如何将 WHERE 和 IN 运算符与 PDO 准备好的语句结合起来。

简单的 WHERE(工作正常):

$value1 = 'val1';
$value2 = 'val2';
$stmt = $pdo->prepare('SELECT * FROM mytable WHERE val1 = ? AND val2 = ?');
$stmt->bindParam(1, $value1);
$stmt->bindParam(2, $value2);
$stmt->execute();

IN 语句(工作正常)

$myArr = ['NY', 'PARIS', 'ROME'];
$q  = str_repeat('?,', count($myArr) - 1) . '?';
$sql = "SELECT * FROM myTable WHERE cities IN ($q)";
$stmt = $db->prepare($sql);
$stmt->execute($myArr);

合并(不工作):

$value1 = 'val1';
$myArr = ['NY', 'PARIS', 'ROME'];
$q  = str_repeat('?,', count($myArr) - 1) . '?';
$sql = "SELECT * FROM myTable WHERE column = ? AND cities IN ($q)";
$stmt = $db->prepare($sql);
$stmt->bindParam(1, $value1);
$stmt->execute($myArr);

提前致谢!

【问题讨论】:

  • 什么是$value1 我没有看到它的定义,为什么$myArr 在执行中
  • 使用→bindParam →execute(ARRAY),不能同时使用。
  • column = ? 应该是什么?
  • $value1 仅用于显示目的,在代码前面已定义。
  • @RiggsFolly 我的理解是使用 IN 运算符,$q var 将被填充为 ?根据数组的计数,我只需要指定一个 WHERE 和一个 IN

标签: php pdo prepared-statement


【解决方案1】:

我认为这不起作用的原因是因为您同时使用了这两种方法

$stmt->bindParam(1, $value1); $stmt->execute($myArr);

要使用数组并使其工作,请执行以下操作:

prepare($sql);

execute($myArr);

$myArr 中,您应该包含columns = ? 应该包含的任何内容,您可以使用array_unshift() 将其添加到数组的开头,例如array_unshift($myArr, 'X'); http://php.net/manual/en/function.array-unshift.php

调用array_unshift()后,变量$myArr的值如下:

[myArr] => Array
        (
            [0] => X
            [1] => NY
            [2] => PARIS
            [3] => ROME
        )

现在您可以正确调用 PDO 语句了:

prepare($sql);
execute($myArr);

【讨论】:

  • 是的,这正是我想要的。现在完全有道理。谢谢!
  • @cableguy 没问题。编码愉快!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
  • 1970-01-01
  • 2017-03-13
  • 1970-01-01
  • 2014-03-12
  • 2016-10-16
  • 1970-01-01
相关资源
最近更新 更多