2013-07-28 2 views
-2

이 mysql 쿼리/prepared 문을 실행하려고 할 때 문제가 있습니다.준비된 문 설정 및 실행 (mysqli 사용)

Notice: Undefined variable: stmt in ...on line 62 
    Warning: mysqli_stmt_error() expects parameter 1 to be mysqli_stmt, null given in ... on  line 62 

라인 (62)이 마지막에 mysqli_stmt_error($stmt) 포함 된 행이 : 나는 코드를 실행하면

<?php 

    if (!empty($_POST['var1'])&&!empty($_POST['var2']) 
    &&!empty($_POST['var3'])&&isset($_POST['var4'], 
    $_POST['var5'], $_POST['var6'])) { 

    require_once 'connect.inc.php'; 

    $query = "INSERT INTO tablename (var1, var2, var3, var4, var5, var6) 
    VALUES (?,?,?,?,?,?)"; 

    $stmt = mysqli_prepare($link, $query); 

    mysqli_stmt_bind_param($stmt, "ssssss", $var1, $var2, $var3, $var4, $var5, $var6); 

    $var1 = $_POST['var1']; 
    $var2 = $_POST['var2']; 
    $var3 = $_POST['var3']; 
    $var4 = $_POST['var4']; 
    $var5 = $_POST['var5']; 
    $var6 = $_POST['var6']; 

    mysqli_stmt_execute($stmt); 

    if (mysqli_stmt_affected_rows($stmt)==1) { 
    echo 'Thank you for your submission.'; 
     } else { 
     mysqli_stmt_close($stmt); 
     mysqli_close($link); } 

} else { 
echo 'We were unable to process your information. Please ensure all required fields 
     were filled out.'.mysqli_stmt_error($stmt); 
} 

?> 

, 나는 다음과 같은 오류 메시지가 나타납니다. 내가 알 수있는 한, 나는 $stmt을 올바르게 설정했다. ($linkconnect.inc.php 페이지에서 제공됩니다.) 내가 매개 변수로 $stmt을 할 때부터 메시지 null given을받을 이유는 확실하지 않다 1.

사람이 내가 잘못 알고 있나요?

+0

예, 있습니다. 보고 오류가 전혀 없습니다. 여기, http://stackoverflow.com/a/15447204/285587 –

+1

또한 오프 주제 아무도 간단한 디버깅 기법을 알 것 같다 –

+0

이것은 웹 사이트를 개발하는 나의 처음이다 ... 아직도 배우기! – user2547925

답변

-1

쿼리 오류를 캡처하려고하지만 $ _POST var 오류가 표시된 위치에서 사용하고 있습니다. 개선 된 코드보기 :

<?php 

    if (!empty($_POST['var1'])&&!empty($_POST['var2']) 
    &&!empty($_POST['var3'])&&isset($_POST['var4'], 
    $_POST['var5'], $_POST['var6'])) { 

    require_once 'connect.inc.php'; 

    $query = "INSERT INTO tablename (var1, var2, var3, var4, var5, var6) 
    VALUES (?,?,?,?,?,?)"; 

    $stmt = mysqli_prepare($link, $query); 

    $var1 = $_POST['var1']; 
    $var2 = $_POST['var2']; 
    $var3 = $_POST['var3']; 
    $var4 = $_POST['var4']; 
    $var5 = $_POST['var5']; 
    $var6 = $_POST['var6']; 

    mysqli_stmt_bind_param($stmt, "ssssss", $var1, $var2, $var3, $var4, $var5, $var6); 
    mysqli_stmt_execute($stmt); 

    if (mysqli_stmt_affected_rows($stmt)==1) { 
      echo 'Thank you for your submission.'; 
     } else { 
      mysqli_stmt_close($stmt); 
      mysqli_close($link); 

      // do something with your statement error 
      echo mysqli_stmt_error($stmt); 
     } 

} else { 
    echo 'We were unable to process your information. Please ensure all required fields were filled out.'; 
} 
?> 
+0

내 대답을 뽑은 사람에게; 제가 지적하고있는 것이 정확히 맞기 때문에 코드를 잘 보시기 바랍니다. – RMK

+0

그냥 움직이는 $ var에 그 부분을 제거하고 내 downvote를 제거 하겠어. –

+0

바인딩의 순간에 정의 된 매개 변수를 바인딩 할 수 없기 때문에 올바른 추가 사항입니다 (PHP는 인터프리터로 소스 코드를 직접 실행한다는 의미입니다). 다시 되돌릴 경우 downvote를 제거하려면 올바른 편집이 필요합니다. – RMK