2016-07-22 10 views
0

mysqli_multi_query 함수를 사용하여 동일한 테이블에 여러 행을 삽입하려고하지만 첫 번째 쿼리 만 실행합니다. 쉼표로 구분 된 첫 번째 쿼리 끝에 값을 추가하는 시도했다 그러나 아무것도 작동하는 것. 어떤 제안?PHP는 mysqli_multi_query() 첫 번째 쿼리 후 삽입 중지

준비된 문으로 전환했지만 여전히 첫 번째 결과 만 삽입되었습니다. 내가 놓친 게 있니?

$DBConnect = mysqli_connect("localhost", "root", "", "getpressed"); 

if ($DBConnect->connect_error) { 
die("Connection failed: " . $DBConnect->connect_error); 

}

$stmt = $DBConnect->prepare("INSERT INTO orderdetails (orderID, productID, quantity) VALUES (?, ?, ?)"); 
$stmt->bind_param("iii", $orderID, $productID, $quantity); 

$orderID = $orderID; 
$productID = 1; 
$quantity = $sportShirtQuantity; 
$stmt->execute(); 

$orderID = $orderID; 
$productID = 2; 
$quantity = $sportCoatQuantity; 
$stmt->execute(); 

echo "New records created successfully"; 

$stmt->close(); 
$DBConnect->close(); 
+3

**이 기능을 사용하지 마십시오. 본질적으로 위험합니다. 자리 표시 자 값과 ['bind_param']을 사용하여 [prepared statements] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)를 사용하십시오 (http://php.net/manual/en/ mysqli-stmt.bind-param.php)를 사용하여 쿼리에 사용자 데이터를 추가하십시오. 이것을 두 개의 값을 가진 하나의 INSERT로 할 수도 있고 다른 바인딩으로 두 번 실행하는 INSERT를 준비 할 수도있다. 어느 쪽이든 당신이 여기있는 것보다 훨씬 낫습니다. – tadman

+2

지금까지 제공되는 모든 바보 같은 대답 중에서 유일하게 올바른 방법은 @ 태드 먼이 쓴 것입니다. 더 빠르며 사소한 것이고, 'max_allowed_packet'에 저항력이 있습니다. 안전합니다. 누군가가 당신에게 말할 수있는 다른 해결책은 준비된 진술과 비교 된 말 분뇨입니다. –

답변

1

동일한 orderID를 가진 여러 행을 삽입 할 수없는 orderID에 대한 기본 키 인덱스가 있습니다. 나는 바보 야. 도와 주셔서 감사합니다. 그것은 tadman이 제안한 준비된 진술로 훨씬 잘 작동합니다.

-3

마지막 문 떨어져 세미콜론을 제거합니다. 문서에서는이 메서드의 세미콜론을 사용하여 명령문을 연결하고 종료하지는 않습니다.

여기 설명서를 읽어 Link

$sql = "INSERT INTO orderdetails (orderID, productID, quantity) VALUES ('".$orderID."', 1, '".$sportShirtQuantity."');"; 
$sql .= "INSERT INTO orderdetails (orderID, productID, quantity) VALUES ('".$orderID."', 2, '".$sportCoatQuantity."')"; 
+0

시도했는데 주사위는 아직 없습니다. 첫 번째 행만 삽입합니다. – kurt

+0

또한 코드를 살펴보고 O-O PHP와 프로 시저 PHP를 섞어서 하나의 규칙 만 고수하려고합니다. 호환되지 않기 때문입니다. – Groovey

-2

내가 코드를 변경 조금

$mysqli = new mysqli("localhost", "root", "", "getpressed"); 

if ($mysqli->connect_errno) { 
    die("Connection failed: " . $mysqli->connect_error); 
} 

$sql = "INSERT INTO orderdetails (orderID, productID, quantity) VALUES ('".$orderID."', 1, '".$sportShirtQuantity."');"; 
$sql .= "INSERT INTO orderdetails (orderID, productID, quantity) VALUES ('".$orderID."', 2, '".$sportCoatQuantity."');"; 

if ($mysqli->multi_query($sql))) { 
    echo "New records created successfully"; 
} else { 
    echo "Error: " . $sql . "<br>" . mysqli_error($mysqli); 
} 
do { 
    if ($res = $mysqli->store_result()) { 
     var_dump($res->fetch_all(MYSQLI_ASSOC)); 
     $res->free(); 
    } 
} while ($mysqli->more_results() && $mysqli->next_result()); 

가 나는 또한 매우 당신이 PDO는 미래에 제표를 작성 사용하는 것이 좋습니다.

+1

왜 OP가 "이거 해봐"해야합니까? *** 좋은 대답 ***은 무엇을했는지에 대한 설명과 왜 그런 방식으로했는지에 대한 설명을 OP에서뿐만 아니라 미래의 방문객에게도 제공합니다. –