【问题标题】:Pulling ids from cookie, then using NOT IN sql query not working with variable从 cookie 中提取 id,然后使用 NOT IN sql 查询不使用变量
【发布时间】:2015-08-26 11:49:32
【问题描述】:

每次用户查看图像时,我都会设置一个 cookie,然后当他们查看另一个图像时,我会修改该 cookie,使其也具有一个值,包括最后查看的图像 id。

例如

第一张图片:Cookie = 0;

对于每个之后:Cookie = 0,3,4,6,1,44,2

等等

然后我正在检查该 cookie,获取值并尝试输入查询:

$value = 0;
// check for cookie
if ( isset($_COOKIE['viewed']) ) {
    $value = $_COOKIE['viewed'];
}

$stmt = $conn->prepare("SELECT * FROM images where id NOT IN (:viewed) ORDER BY rand() LIMIT 1");
$stmt->execute([':viewed' => $value]);

但这对返回的结果没有任何影响。

如果我将 NOT IN 硬编码为 (1,2,4),那么它将消除这些结果。

在我的 JSON 返回中,我检查了字符串是什么:

$return['cookie'] = $value;

并且数值显示:

"cookie":"0,3,3,2,2,2,2,3,2,2,1,1,1,1,2,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,1,3,2,2,3,3,2,2,3,2,2,2,1"

我怎样才能让它工作?

【问题讨论】:

  • :viewed in 等于查看的id 对吗?
  • 您是否在运行查询之前检查了 $value 的值以确保其中包含正确的数据?
  • @versalle88 是的,死()'ing $value 返回例如0,1,3,5,2,44,55
  • 而不是 $stmt->execute([':viewed' => $value]);试试 $stmt->execute(array(':viewed' => $value));
  • PDO 参数不能是这样的数组。在这里查看一些答案:stackoverflow.com/questions/920353/…

标签: php sql cookies notin


【解决方案1】:

试试这个:

$value = 0;
// check for cookie
if ( isset($_COOKIE['viewed']) ) {
    $value = $_COOKIE['viewed'];
}

$stmt = $conn->prepare("SELECT * FROM images where id NOT IN (:viewed) ORDER BY rand() LIMIT 1");
$stmt->execute(array(':viewed' => $value));

PDO::execute() 只取数组中的值。 见:http://php.net/manual/en/pdostatement.execute.php

【讨论】:

    【解决方案2】:

    这可能是由于 $value 参数本身造成的。 PHP 是一种松散类型的语言

    $stmt = $conn->prepare("SELECT * FROM images where id NOT IN (:viewed) ORDER BY rand() LIMIT 1");
    $stmt->execute([':viewed' => $value]);
    // Here $value is something not evaluated
    

    相反,这样做

    $valueArr = $value.explode(",");
    $notIn = "";
    
    for($i=0; $i<$valueArr.count(); $i++){
        $notIn .= $valueArr[$i]
    }
    $stmt = $conn->prepare("SELECT * FROM images where id NOT IN (:viewed) ORDER BY rand() LIMIT 1");
    $stmt->execute([':viewed' => rtrim($notIn), ","]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-23
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-06
      相关资源
      最近更新 更多