代码之家  ›  专栏  ›  技术社区  ›  mvasco

使用字符串作为数组并在查询中使用它

php
  •  0
  • mvasco  · 技术社区  · 6 年前

    我正在处理一个PHP文件,并通过POST获取以下字符串:

    $temas = $_POST['temas']; //$temas = ".45.12.34"
    

    我有以下问题

    $query = "SELECT * FROM tb_preguntas WHERE tema = '".$temas."'";
    

    我需要在查询的WHERE部分输入每个收到的id

    当然,每次执行时字符串都会改变。

    5 回复  |  直到 6 年前
        1
  •  4
  •   treyBake user1850175    6 年前

    $temas = implode(',', explode('.', $_POST['temas']));
    $temas = trim($temas);
    
    $res = $conn->prepare('select * from `tb_preguntas` WHERE `tema` in (:temas)');
    $res->execute(array(':temas' => $temas));
    

        2
  •  1
  •   Dawson Irvine    6 年前

    如上所述,您可以使用mysql的IN()函数,但是必须删除第一个句点“.”,并将其余的改为逗号“,”。

    $query = "SELECT * FROM `tb_preguntas` WHERE `tema` IN('".str_replace('.',',',trim($temas,'.'))."') ";
    
        3
  •  1
  •   Aurangzeb    6 年前

    最佳方案

    $temas = implode(',', explode( '.', $_POST['temas']));
    $query = "select * from tb_preguntas WHERE tema in (" . $temas . ")";
    

    $temas1 = explode( '.', $_POST['temas'] );
    $temas2 = array();
    foreach( $temas1 as $value ) {
       if( is_numeric( $value )) $temas2[] = $value;
    }
    $query = "select * from tb_preguntas WHERE tema in (" . implode( ',' , $temas2 ) . ")";
    
        4
  •  1
  •   Mark Salvania    6 年前

    explode() 把这些数字除以 . 它必须变成数组。

    然后使用数组的长度将查询运行到循环中,如下所示:

    $id = explode('.',$temas);
        foreach($id as $temas_id) {    
          $query = "SELECT * FROM tb_preguntas WHERE tema = '".$temas_id."'";
          if(isset($conn->query(query ))) {
            // Execute code here if there's a result.
          }
        }
    
        5
  •  0
  •   Hiren Spaculus    6 年前

    $temas = $_POST['temas']; 
    
    $temas = explode('.',$temas);
    
    $query = mysql_query("SELECT * FROM test_stipe WHERE tema in '".implode("', '", $temas)."'");
    

    这个代码运行良好。