2009-03-08 5 views
0

다음과 같은 간단한 PHP 코드 조각이 있습니다.이 코드 조각을 호출하면 데이터베이스에서 관련 아티클을 삭제합니다. 결과는 javac 스크립트 함수로 전달되어 AJAX를 통해 페이지를 업데이트합니다. 아래에 나와있는 것처럼 쿼리가 실패하면 문자열 false을 반환하고 싶습니다.PHP에서 SQL 쿼리 테스트

if($cmd=="deleterec"){ 
$deleteQuery = "DELETE FROM AUCTIONS1 WHERE ARTICLE_NO = ?"; 
if ($delRecord = $con->prepare($deleteQuery)) { 
    $delRecord->bind_param("s", $pk); 
    $delRecord->execute(); 
    $delRecord->close(); 
    echo "true"; 
} else { 
echo "false"; 
} 
} 
내가 놓친와 쿼리가 성공인지 아닌지 올바른 방법을 확인하기 위해 무엇을 알고 싶습니다

.

편집 : 응답을 바탕으로

, 내가 대신 준비의 $delRecord->execute();의 경우 절을 이동하지만, 그의 차이를하지 마에 시도. 페이지가 false으로 반환되도록 할 수 없습니다.

쿼리가 항상 잘못 실행 되더라도 항상 실행되므로 'true'가 반환되므로 아래 솔루션이 작동하지 않습니다. 영향을받는 행 방법을 사용하면 error : Call to undefined method mysqli_stmt::affected_rows()

+0

지금은 분명히 작동하지 않는 이유에 대해 자세히 설명하고 Javascript 코드도 함께 표시하십시오. – Alnitak

+0

어리석은 질문이 먼저 - $ con는 유효한 연결입니다, 맞습니까? – jmucchiello

+0

예, 확실합니다. Alnitak, 자바 스크립트 코드가 붙어 있지만, 페이지가 결코 'false'를 반환하지 않으므로 자바 스크립트 문제라고 생각하지 않습니다. –

답변

2

mysqli->affected_rows()을 사용하여 쿼리가 성공했는지 (또는 mysqli_stmt->execute()의 결과 값을 사용할 수 있는지) 확인해야합니다.

귀하의 예를 촬영, 아무것도 수정하지하지만 위의 경우 : 현재는 SQL 문을 올바르게, 당신이 실제로 기록을 삭제 여부를 확인하지 않을 준비가되어 있는지 여부를 확인하고

if($cmd=="deleterec") { 
    $deleteQuery = "DELETE FROM AUCTIONS1 WHERE ARTICLE_NO = ?"; 

    if ($delRecord = $con->prepare($deleteQuery)) { 
     $delRecord->bind_param("s", $pk); 
     $delRecord->execute(); 


     if ($delRecord->affected_rows() > 0) { 
      echo "true"; 
     } else { 
      echo "false"; 
     } 

     $delRecord->close(); 
    } 
} 
+0

아마도 close()를 호출 한 후 affected_rows()를 확인하지 않는 것이 가장 좋습니다 ... – Alnitak

+0

True ... 좀 더주의 깊게 읽어야합니다 ... 고칠 것입니다 :) 감사합니다. –

2

.

보십시오 : 당신이 제대로 자바 스크립트 코드의 결과 문자열을 확인하고 있는지 언급하지 않는

... 
echo ($delRecord->affected_rows() > 0) ? 'true' : 'false'; 
$delRecord->close(); 

- 그게 문제가 있다면 우리는 더 많은 정보가 필요합니다.

+0

'false'에 닫는 따옴표를 잊어 버렸습니다. –

+0

나는 그렇게했다, 고마워! – Alnitak

2

mysqli_stmt->execute()의 반환 값을 사용하여 쿼리가 성공적으로 실행되었는지 확인하십시오. 쿼리가 고정되어 있으며 (서버 측에 오류가없는) 작업을해야하기 때문에

0
if($cmd=="deleterec"){ 
    $deleteQuery = "DELETE FROM AUCTIONS1 WHERE ARTICLE_NO = ?"; 
    $delRecord = $con->prepare($deleteQuery); 
    if ($delRecord === false) { 
     echo "false"; 
    } 

    $delRecord->bind_param("s", $pk); 
    if ($delRecord->execute()) { 
     echo "true"; 
    } else { 
     echo "false"; 
    } 
    $delRecord->close(); 
} 

확인 prepare()는 생략 할 수있다. execute()은 쿼리가 성공적으로 실행 된 경우 true를 반환합니다. affected_rows()을 사용하면 삭제할 항목이 없을 가능성이 높으므로 affected_rows()0을 반환합니다. 그럼에도 불구하고 쿼리가 성공적으로 실행되었습니다.