2013-01-14 4 views
2

제안에 따라 준비된 문을 포함하려고합니다.변수의 수가 매개 변수의 수와 일치하지 않습니다. - 그렇습니다.

그러나 PHP는 제 코드를 허용하지 않습니다. 내가 쿼리에 두 questionmarks 및 bind_Param에서 두 개의 변수를 가지고있는 반면

$stmt = $link->prepare('SELECT COUNT(*) FROM `table` WHERE `company` = CONVERT(_utf8 \'?\' USING latin1) COLLATE latin1_german1_ci AND `password` = CONVERT(_utf8 \'?\' USING latin1) COLLATE latin1_german1_ci'); 
$stmt->bind_Param('ss', $firmaP, $kennwP); 
$firmaP = utf8_encode($_POST['company']); 
$kennwP = utf8_encode($_POST['password']); 
if ($stmt->execute()) { 
    if($row = $stmt->fetch()) { 
     echo "OK"; 
    } 
    else 
    { 
     echo "NO"; 
    } 
} 

나는

Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement

를 얻을.

해결 방법?

편집 : \ '? \'를?

로 연결

Fatal error: Call to a member function bind_param() on a non-object

+3

당신하지 쿼리에서 인용 문자열 인수 바인드 매개 변수를 사용하여; 당신은 당신을 위해 bind 문을 남겨 둡니다. –

+1

당신은 매개 변수를 인용하지 않습니다. db 엔진이 그렇게합니다. –

+0

'$ firmaP'와'$ kennwP'는 문장에 바인드 할 때 값을 가지고 있습니까? – datasage

답변

7
다음과 같이 ?의 말을 인용하지 마십시오

:

$stmt = $link->prepare('SELECT COUNT(*) FROM `table` WHERE `company` = CONVERT(_utf8 ? USING latin1) COLLATE latin1_german1_ci AND `password` = CONVERT(_utf8 ? USING latin1) COLLATE latin1_german1_ci'); 
$firmaP = utf8_encode($_POST['company']); 
$kennwP = utf8_encode($_POST['password']); 
$stmt->bind_Param('ss', $firmaP, $kennwP); 
if ($stmt->execute()) { 
    if($row = $stmt->fetch()) { 
     echo "OK"; 
    } 
    else 
    { 
     echo "NO"; 
    } 
} 
+0

치명적인 오류가 발생했습니다 : 객체가 아닌 객체 –

+1

+1에 대한 멤버 함수 bind_param()을 호출하십시오. 매개 변수가있는 쿼리의 요점은 필드를 인용 할 필요가 없다는 것입니다. – SDC

+0

@SDC 나는 그것이 안전하다고 들었다. –

관련 문제