【问题标题】:PHP sql statement where clause to multiple array valuesPHP sql语句where子句到多个数组值
【发布时间】:2017-11-11 02:57:12
【问题描述】:

如果 value[3] 存储了多个数据,我如何对数组使用 where 子句

$fsql="select * from Error where RptDatime = 201706091000 and partnumber like  ('$value[3]')";
$getResults = $conn->prepare($fsql);        
$getResults->execute();
$results = $getResults->fetchAll(PDO::FETCH_BOTH);    

foreach($results as $row)
{         
    $mac = $row['Machine'];                
    $id = $row['Id'];                
    echo 'ID:'.$id.'Machine Number :'.$mac;
}

【问题讨论】:

标签: php mysql sql arrays pdo


【解决方案1】:

您可以使用正则表达式函数代替like。下面是给你的示例代码。

$partnumner = [];

    foreach($value[3] as $v)
    {
        $partnumber[] = "*.".$v.".*";
    }

    $fsql="select * from Error where RptDatime = 201706091000 and partnumber REGEXP  '".implode("|",$partnumber)."'";

如果你还想用like,可以关注回答here

【讨论】:

    【解决方案2】:

    我假设你有一个数字数组,所以首先你应该验证预期的数据,然后将它内爆成逗号分隔的字符串。

    if(!isset($value[3])){
        return false;
    }
    if(!is_array($value[3])){
        return false;
    }
    foreach($value[3] as $number){
        if(!is_numeric($number)){
            return false;
        }
    }
    $numbers = implode(",",$value[3]);
    $fsql=sprintf("select * from Error where RptDatime = 201706091000 and partnumber in  (%s)",$numbers);
    $getResults = $conn->prepare($fsql);        
    $getResults->execute();
    $results = $getResults->fetchAll(PDO::FETCH_BOTH);    
    
    foreach($results as $row)
    {         
        $mac = $row['Machine'];                
        $id = $row['Id'];                
        echo 'ID:'.$id.'Machine Number :'.$mac;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多