2014-04-19 7 views
0

내 데이터베이스의 여러 테이블에서 delete 문을 실행하려고하지만 어떤 이유로이 코드가 작동하지 않고 그 이유가 확실하지 않습니다. $ productId는 $ _GET 변수를 사용하여 전달됩니다. 이 문장은 phpMyAdmin에서 작동하지만, 내 사이트에 들어가면 작동이 멈 춥니 다. 구문이 잘못 되었습니까?PHP를 사용하는 하나의 SQL 문에서 다중 쿼리

$sql = ' 
    DELETE FROM products 
    WHERE prod_id = ' . $productID . ' 
    LIMIT 1; 

    DELETE FROM product_category 
    WHERE prod_id = ' . $productID . ' 
    LIMIT 3; 

    DELETE FROM product_images 
    WHERE prod_id = ' . $productID .' 
    LIMIT 1 
'; 

$db->query($sql); 
+2

사용중인 API에 따라 다릅니다. mysql과 PDO는 다중 명령문을 허용하지 않는다. mysqli는 그것을 허용하지만, mysql_multi_query를 사용해야한다. – Barmar

+0

3 개의 쿼리를 저장 프로 시저에 씁니다. –

+0

@Barmar, mysqli_multi_query *하지만 논리적 인 사람이 알아낼 것이라고 확신합니다 :) – Devon

답변

0

Barmar는 의견에서 PDO는이를 지원하지 않습니다. mysqli_multi_query를 사용할 수는 있지만 그렇게하지 않는 것이 좋습니다.

내가 제안하는 것은 거래를 사용하는 것입니다. 어떤 API를 사용하고 있는지 모르겠지만 PDO를 좋아하므로 기본 예제를 보여 드리겠습니다.

$db->beginTransaction(); 
$q1 = $db->query(...); 
$q2 = $db->query(...); 
$q3 = $db->query(...); 
if ($q1 and $q2 and $q3) { 
$db->commit(); 
} 
else { 
$db->rollBack(); 
} 

트랜잭션이 유용한 이유는 무엇입니까? 이를 통해 모든 쿼리를 시스템에 제출 한 다음 시스템에 커밋하기 전에 오류 및 오류 계산을 확인할 수 있습니다. 오류를 발견하면 rollback()을 사용하여 위의 쿼리가 실제로 데이터베이스를 수정하지 못하게 할 수 있습니다.