【问题标题】:PHP MYSQL PDO IN Statement [duplicate]PHP MYSQL PDO IN 语句 [重复]
【发布时间】:2015-09-07 19:41:25
【问题描述】:

我在执行数组的 IN 语句时遇到问题。我将 IN 语句用于不同的公司站点类型 (fk_cs_type)。现在我的代码在它是单个数组时有效,例如数组(“内部站点”或数组(“供应商”)但是当有两个元素时它不起作用。任何关于我做错了什么的建议将不胜感激。

$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();
      }

【问题讨论】:

  • Rizier123 我在此页面上尝试了两种解决方案,但我得到一个 HY093 无效参数编号绑定变量数与令牌数不匹配。我认为这与 $stmt->execute($in);有什么建议吗??

标签: php mysql pdo


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我猜是引号有问题,

    在$in = array("INTERNAL SITE","SUPPLIER"); 行之后添加此代码,

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

    【讨论】:

      猜你喜欢
      • 2010-12-07
      • 1970-01-01
      • 2011-02-10
      • 2014-03-12
      • 1970-01-01
      • 2015-06-27
      • 2011-02-18
      • 1970-01-01
      • 2014-09-20
      相关资源
      最近更新 更多