2009-10-22 3 views
1

경우 나는 그 모든 다른 쿼리입니다 내 PHP 스크립트제한 두 번째와 세 번째 SQL없이 삽입

$result1 = mysql_query("insert ignore into...this.... 
$result2 = mysql_query("insert into...that.... 
$result3 = mysql_query("insert ignore...again 

에 있어요.

첫 번째 쿼리가 삽입을 시도 할 때 중복 레코드가 있으면 입력하지 않습니다.

첫 번째 쿼리가 아무 것도 입력하지 않은 경우 두 번째 및 세 번째 쿼리를 실행하지 않으려 고합니다.

처음 입력 한 내용이 없으면 2 및 3 쿼리 실행을 방지하려면 어떻게합니까? PHP에서하시기 바랍니다.

감사

답변

2

당신은 트랜잭션을 사용해야합니다. MyISAM 테이블은 이 아니고 트랜잭션을 지원합니다.

+0

경고 : mysql_affected_rows() : 제공된 인수가 유효한 MySQL 링크 리소스가 아닙니다. ;) - – Ossi

+0

@Ossi : 알았어, 네가 본 경고를 일으킬 수있는 문제를 봤어. 나는 나의 대답을 업데이트했다. 다시 시도해보고 작동하는지 알려주세요. – Asaph

+0

나는 시작과 롤백을했는데, sinco는 InnoDB를 가지고 있지 않다. 이제는 ... mysql_affected_rows()가 작동하고 mysql_affected_rows ($ result1)가 작동하지 않았다. "Gumbo"가 그의 대답을 수정하지 않았기 때문에 나는 대답 해줘. :) – Ossi

3

사용에게 mysql_affected_rows function 영향을받는 행의 수를 얻을 수 있습니다 :

$result1 = mysql_query("insert ignore into...this...."); 
if (mysql_affected_rows($result1) > 0) { 
    $result2 = mysql_query("insert into...that...."); 
    $result3 = mysql_query("insert ignore...again"); 
} 
+0

경고 : mysql_affected_rows() : 제공된 인수가 유효한 MySQL 링크 리소스 ... thats 내가 가진 것;) – Ossi

0

내가 지금 자신을 그것을 밖으로 시도 할 수는 없지만 mysql_affected_rows() 당신이 원하는 것을 달성 할 수있을 것 같습니다 에 대한.

mysql_query("begin"); 
$result1 = mysql_query("insert ignore into...this...."); 
if (mysql_affected_rows() > 0) { 
    $result2 = mysql_query("insert into...that...."); 
    $result3 = mysql_query("insert ignore...again"); 
    mysql_query("commit"); 
} else { 
    mysql_query("rollback"); 
} 

편집이 : 테이블이 InnoDB의 경우에만 동작합니다

관련 문제