2014-04-15 59 views
-1

我知道这个问题已经回答了很多次。我已经看到了这些问题,但仍然无法理解发生了什么问题。这里的一段代码 -警告:SQLSTATE [HY093]:无效的参数编号:绑定变量的数量与令牌数量不匹配

$var =$_POST['feature']; 

    $status = 'passed'; 
    $allTest = $conn->prepare('SELECT SUM(IF(STATUS = :status, 1, 0)) passed_count FROM tooldata WHERE testCase REGEXP :var GROUP BY family ORDER BY family'); 
    $allTest->bindValue(":var", "^$var", PDO::PARAM_STR); 
    $allTest->execute(array(':status' => $status)); 

    while($row = $allTest->fetch(PDO::FETCH_ASSOC)) 
     { 
     foreach($row as $key) 
      { 
       $totalTestPassed[] = $key; 
      } 
     } 
      print_r($totalTestPassed); 

我得到的线这个错误 - $allTest->execute(array(':status' => $status));

请指导我关于为什么我收到此错误。

+0

为什么你在执行时同时使用bindValue和array? – Svetoslav

+0

@Svetlio为什么我不能像这样使用它? – Satish

+0

,因为你之前没有见过这样的方法,没有任何手册或教程告诉你这么做? –

回答

0

试试这个

$var =$_POST['feature']; 

$status = 'passed'; 
$allTest = $conn->prepare('SELECT SUM(IF(STATUS = :status, 1, 0)) passed_count FROM tooldata WHERE testCase REGEXP :var GROUP BY family ORDER BY family'); 
$allTest->bindValue(":var", "^$var", PDO::PARAM_STR); 
$allTest->bindValue(":status", $status); 
$allTest->execute(); 

while($row = $allTest->fetch(PDO::FETCH_ASSOC)) 
{ 
foreach($row as $key) 
{ 
$totalTestPassed[] = $key; 
} 
} 
print_r($totalTestPassed); 

,你也可以与bindParam废除做这个

$allTest->execute(array(':status' => $status, ':var' => ^$var)); 

这将通过这两个作为一个字符串由默认的查询,而不是单独定义它

0

试试这个:

$status = 'passed'; 
$allTest = $conn->prepare('SELECT SUM(IF(STATUS = :status, 1, 0)) passed_count FROM tooldata WHERE testCase REGEXP :var GROUP BY family ORDER BY family'); 
$allTest->bindValue(":var", $var, PDO::PARAM_STR); 
$allTest->bindValue(":status", $status, PDO::PARAM_STR); 
$allTest->execute(); 
相关问题