【问题标题】:Array in cookie, access with pdo querycookie 中的数组,通过 pdo 查询访问
【发布时间】:2017-08-16 16:41:40
【问题描述】:

我在 cookie 中有一个 id 数组。 当我打印 cookie 数组时,它会像这样打印: ["39","580"]。我需要访问id39580

我已经尝试了在这样的查询中使用它所需的一切:

    $queryordenar = $db->prepare("SELECT id FROM property 
    WHERE id IN (:list) ORDER BY price ASC");
    $queryordenar->execute(array(
    'list' => $array
     ));

谢谢

【问题讨论】:

  • :list 不会像你期望的那样扩展。您需要使用explode 拆分数组,然后在执行语句之前构建SQL 语句中所需的字符串。

标签: php mysql arrays cookies pdo


【解决方案1】:

您不能将数组作为参数传递。您需要爆炸数组,传入一个 ?对于每个值,然后将正确的值绑定到每个占位符:

$bindPlaceholders = [];
foreach ($array as $val) {
    $bindPlaceholders[] = "?";
}
$bindString = "(".implode(",", $bindPlaceholders).")";
$queryordenar = $db->prepare("SELECT id FROM property WHERE id IN ".$bindString." ORDER BY price ASC");
foreach ($array as $i => $val) {
    $queryordenar->bindValue($i + 1, $val); // binding starts at 1
}
$queryordenar->execute();

【讨论】:

  • 此行必须有一个 ):$bindString = "(".implode(",", $bindPlaceholders.")";
  • 这意味着 $array 并不是真正的数组。哦,我看到它是 JSON 编码的。所以首先解码它:$array = json_decode($array).然后,您将拥有一个数组,并且 $bindString 值将被正确填充。
  • 我得到:PHP 警告:为 /home 中的 foreach() 提供的参数无效... 语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,了解在 ') 附近使用的正确语法 - cookie 之前是这样完成的:setcookie("list", json_encode($array) -
  • 成功了感谢@ishegg,完整代码:$array = $_COOKIE["list"]; $array = json_decode($array); $bindPlaceholders = []; foreach ($array as $val) { $bindPlaceholders[] = "?"; } $bindString = "(".implode(",", $bindPlaceholders).")"; $queryordenar = $db->prepare("SELECT id FROM property WHERE id IN ".$bindString." ORDER BY price ASC"); foreach ($array as $i => $val) { $queryordenar->bindValue($i + 1, $val); // 绑定从 1 开始 } $queryordenar->execute();
  • 很高兴我能帮上忙。
猜你喜欢
  • 2015-05-21
  • 2018-05-21
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
  • 2020-12-18
  • 1970-01-01
  • 2014-02-04
  • 1970-01-01
相关资源
最近更新 更多