Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO MySQL“;不在();不起作用_Php_Mysql_Pdo - Fatal编程技术网

Php PDO MySQL“;不在();不起作用

Php PDO MySQL“;不在();不起作用,php,mysql,pdo,Php,Mysql,Pdo,我有一个查询,返回相关的视频标题从给定的视频,所以相同的流派,国家,出版日期等 我想使用notin()函数排除某些video\u名称。问题是,查询返回我要排除的视频,并且它们也在数组中首先排序。为什么会这样 public function interval($month, $not, $limit) { $this->not = array_unique($not); $i = implode(',', $this->not); echo $i;//prin

我有一个查询,返回相关的视频标题从给定的视频,所以相同的流派,国家,出版日期等

我想使用
notin()
函数排除某些
video\u名称。问题是,查询返回我要排除的视频,并且它们也在数组中首先排序。为什么会这样

public function interval($month, $not, $limit) {
    $this->not = array_unique($not);
    $i = implode(',', $this->not);

    echo $i;//prints: onajr,babyjem,posh

    $query = '
        select title, artists, published, views, video_name, yt_id, duration, play_start, genre, country from videos
        where
        published BETWEEN :published - INTERVAL :month MONTH AND :published + INTERVAL :month MONTH
        and MATCH(country) AGAINST(:country IN boolean mode)
        and MATCH(genre) AGAINST(:genre IN boolean mode)
        and
        video_name not in (" :i ")
        ORDER BY RAND() limit :limit
    ';

    $run_query = $this->pdo->prepare($query);

    $run_query->bindValue(':published', $this->published);
    $run_query->bindValue(':country', '+' . $this->data->country);
    $run_query->bindValue(':genre', '+' . $this->data->genre);
    $run_query->bindValue(':limit', $limit, PDO::PARAM_INT);
    $run_query->bindValue(':month', $month, PDO::PARAM_INT);
    $run_query->bindValue(':i', $i);

    $run_query->execute();
    $data =  $run_query->fetchAll(PDO::FETCH_ASSOC);

    print_r($data);
    //contains all three of them onajr,babyjem,posh
}

您可以创建参数和值的数组,如下所示:

$this->not = array_unique($not);
$i = array();
foreach( $this->not as $key => $val ) {
    $i[':vid_' . $key] = $val;
}
将其绑定到查询:

' ..... video_name not in ('. implode(',', array_keys($i)) .') ....'
然后,绑定参数:

foreach( $i as $key => $val ) {
    $run_query->bindValue($key, $val);
}

video\u name not in(:i)
将在此处添加@MichaelBerkowski注释,“PDO不会将逗号分隔的列表扩展为
in()
列表,而是将其视为
in()
的单个字符串值,其中恰好包含文字
”您需要动态构建
$i
和绑定;每个占位符有1个值。那么分别绑定每个
video\u name
@AlonEitan评论工作正常。
视频\u name not in(:i)
工作正常,排除的视频或未显示。哦,很高兴知道。尽管如此,当你想绑定字符串时,我的答案可能还是有用的,不仅是数字,而且工作正常。我正在测试,这些视频没有显示。无论如何,谢谢。