首页 文章

如何在列的值的where子句中使用implode

提问于
浏览
1

解码前JSON字符串的一部分: ,"avail":["Wed-2","Wed-3"]

已解码: $data = json_decode($return, true); 存储在变量中: $avail = $data['avail'];

//数组声明

$days = array();
$cols = array();

格式高于 $avail:

if($avail != ""){
        foreach($avail as $k=>$v)
        {
            echo $v;

            $array = explode('-', $v);
            $day =$array[0]; // Wed
            $column =  $array[1]; // 2

            if($column == 1)
            {
            $col = "morning";

            }
            if($column == 2)
            {
                $col = "afternoon";
            }
            if($column == 3)
            {
                $col = "evening";
            }
             echo $col ."=>". $day;

            array_push($cols,$col);
            array_push($days,$day);
        }
        }

//现在使用数组($ days)匹配posts表中列'morning'的值 .

echo $sql=" SELECT * , (3956 * 2 * ASIN(SQRT( POWER(SIN(('$lat' - lat) *  pi()/180 / 2), 2) +COS('$lat' * pi()/180) * COS(lat * pi()/180) * POWER(SIN(('$lon' - lon) * pi()/180 / 2), 2) ))) as distance  
from posts,subjects WHERE posts.afternoon IN (" . implode(", ",$days) . ") AND posts.catID = '$catid' AND posts.subname LIKE '%$subject%' AND posts.subid = subjects.subid AND posts.catID = subjects.catid  AND posts.pricing <= '$rate'  having  distance <= '$distance' order by distance ";
echo"
"; $stmt =connection::$pdo->prepare($sql); $stmt->execute(); $place=array(); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $place[] = $row; } var_dump($place);

但是它返回了这个错误:

致命错误:未捕获异常'PDOException',消息'SQLSTATE [42S22]:未找到列:1054在第128行的C:\ wamp \ www \ fetch_tutor.php中'where子句'中的未知列'Wed'(!) PDOException:SQLSTATE [42S22]:找不到列:1054第128行的C:\ wamp \ www \ fetch_tutor.php中'where子句'中的未知列'Wed'

基于此,我理解提供的数组($ day)作为字段名称 . 实际上,这是数组中用于检查posts表中“morning”字段的值 .

我该怎么办呢 . 我浪费了将近一天的时间!

1 回答

  • 2

    它应该是

    WHERE posts.afternoon IN ('" . implode("',' ",$days) . "')
    

    得到像 WHERE posts.afternoon IN ('Mon','Wed','Sun') 这样的东西 .

相关问题