dpi10335 2015-01-18 14:41
浏览 26
已采纳

使用数组PHP在SQL数据库中搜索

$value = array('one', 'two', 'three');

I have that part of query:

$features_filter .= $this->db->placehold('AND p.id in (SELECT product_id FROM __options WHERE feature_id=? AND value in (?@) ) ', $feature, $value);

That query returns result only if database contains values == 'one' or 'two' or 'three'. How I can change my query to do that query returned some LIKE 'one' or 'two' or 'three'?

PS Sorry for my bad English

  • 写回答

1条回答 默认 最新

  • doudun2212 2015-01-18 14:53
    关注

    Here's a quick and dirty solution:

    $value = array('one', 'two', 'three');
    
    
    for ($i = 0; $i < sizeof($value); $i++ ):
        $new .= " LIKE '%$value[$i]%'";
        if ( $i < sizeof($value) -1 ) :
             $new .= " OR";
        endif;
    endfor;
    
    $features_filter .= $this->db->placehold('AND p.id in (SELECT product_id FROM __options WHERE feature_id=? AND value ' . $new ) ', $feature );
    

    Addition: On PHP >= 5.3 the for-loop could also be replaced with this code:

    array_walk( $value, function (&$value, $key) {
            $value = " LIKE %$value%";
       });
    
    $new = implode(' OR', $value );
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配