2012-10-12 3 views
1

를 사용하여 데이터베이스에 여러 행을 삽입 I 데이터베이스에 1 행을 삽입합니다 다음 코드가 있습니다는 MySQL의

public function fixed($fieldDay, $fieldNight) { 

    $pdo = new SQL(); 
    $dbh = $pdo->connect(Database::$serverIP, Database::$serverPort, Database::$dbName, Database::$user, Database::$pass); 

    $this->sql = "INSERT INTO tblfixedfare (SELECT NULL, MAX(FixedFareID)+1, '1', '$fieldDay' FROM tblfixedfare)"; 

try { 
     // Query 
     $stmt = $dbh->prepare($this->sql); 

     $stmt->execute(); 

     $count = $stmt->rowCount(); 

     echo $count.' row(s) inserted by SQL: '.$stmt->queryString; 

     $stmt->closeCursor(); 

    } 

    catch (PDOException $pe) { 
     echo 'Error: ' .$pe->getMessage(). 'SQL: '.$stmt->queryString; 
     die(); 
    } 

    // Close connection 
    $dbh = null; 
} 

} 

이 실행되고있는 동시에, 내가 같은 테이블에 다른 행을 삽입 할 :

$this->sql = "INSERT INTO tblfixedfare (SELECT NULL, MAX(FixedFareID)+1, '2', '$fieldNight' FROM tblfixedfare)";

어떻게 이렇게 가겠어요? 모두에도

EDIT가 MAX(FixedFareID)+1 요구가 동일한 값이되도록 값을 삽입한다.

+0

왜 당신은 그냥 AUTO_INCREMENT를 사용하지 않는? – jcho360

+0

['UNION'] (http://dev.mysql.com/doc/refman/5.5/en/union.html) 두 개의 SELECT 문. – DaveRandom

+0

준비된 문을 사용하고 있지만 매개 변수를 바인딩하지 않고 원시 변수를 쿼리에 전달하는 중입니까? 무의미한가요? –

답변

3

변경이에 SQL 쿼리 정의 :

$this->sql = " 
    INSERT INTO tblfixedfare 
     SELECT NULL, MAX(FixedFareID) + 1, '1', :fieldDay 
     FROM tblfixedfare 
     UNION 
     SELECT NULL, MAX(FixedFareID) + 1, '2', :fieldNight 
     FROM tblfixedfare 
"; 

... 그리고이에 execute() 호출을 변경 :

$stmt->execute(array(
    'fieldDay' => $fieldDay, 
    'fieldNight' => $fieldNight 
)); 
+0

... 또는 이것도 작동합니다. – DaveRandom

+0

예를 들어'MAX (FixedFareID) + 1' = 5이라고하면 두 삽입에 모두 값 5를 사용합니까? – nsilva

+0

@nsilva 예. 그 밖의 무엇을 기대합니까? – DaveRandom