提问者:小点点

PHP MYSQL PDO IN语句[重复]


我在为数组执行IN语句时遇到问题。我将IN语句用于不同的companysite类型(fk_cs_类型)。现在,当我的代码是单个数组时,例如数组(“内部站点”)或数组(“供应商”)时,我的代码可以工作,但是当有两个元素时,我的代码就不工作了。如果您对我的错误有任何建议,我将不胜感激。

$srchField = $srchInput->srchString;
$in = array("INTERNAL SITE","SUPPLIER");    
$type = implode(",", $in);
$dbname = $_SESSION['dbname'];

    try {
        $conn = new PDO("mysql:host=localhost;dbname=$dbname", $db->id, $db->pass); //connect to db
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    //error modes     
        $stmt = $conn->prepare('SELECT cs_id, name, alias, fk_cs_type as type, is_active as active FROM companysite WHERE ( fk_cs_type IN (?)) AND (CASE WHEN "'.$isActive.'" = "ALL" THEN is_active = 0 OR 1  ELSE is_active = "'.$isActive.'" END) AND ((CASE WHEN "'.$srchBy.'" = "ALIAS" THEN alias ELSE name END)  LIKE ?)');
        $stmt->bindValue(1, "$type", PDO::PARAM_STR);
        $stmt->bindValue(2, "%$srchField%", PDO::PARAM_STR);
        $stmt->execute(); 
        $result = $stmt->fetchAll(PDO::FETCH_ASSOC);            
      }catch(PDOException $e) {         
       $return->error = $e->getMessage();
      }

共2个答案

匿名用户

在字符串上使用in语句时,仍然需要将每个字符串封装在数组中。

$type = "'".(implode("', '", $in))."'";

匿名用户

我想这是引用的问题,

$in=array(“内部站点”、“供应商”)之后添加此代码行,

$in = array_map(function($v){
          return "'$v'";
      }, $in);