2014-12-22 3 views
1

그래서 내 문제는 다른 SQL 항목을 기반으로 정보를 사용하여 여러 SQL 항목을 보내야한다는 것입니다.

나는 쉽게 이해할 수 있도록 사용하고있는 코드를 단순화했습니다.

$sql = mysql_query("SELECT product FROM `cart` WHERE username = '".$user."' LIMIT 10"); 

while ($rowcart = mysql_fetch_row($sql)) { 

    $sendorder = "INSERT INTO Orders (order_id, product) VALUES ('NULL', '".$rowcart[0]."')"; 
    mysql_query($sendorder); 

} 

실행했을 때 작동하지 않았습니다. 그래서 echo $sendorder을 보내 정확히 무엇을 보려고했는지 그리고 단지 값을 복사하는 대신 각 항목에 INSERT INTO 부분을 복사하는 것으로 밝혀졌습니다.

예 출력 :

INSERT INTO Orders (order_id, product) VALUES ('NULL', 'Cakes') 
INSERT INTO Orders (order_id, product) VALUES ('NULL', 'Sweets') 
INSERT INTO Orders (order_id, product) VALUES ('NULL', 'Cakes') 
INSERT INTO Orders (order_id, product) VALUES ('NULL', 'Brownies') 
INSERT INTO Orders (order_id, product) VALUES ('NULL', 'Cakes') 
+0

error_reporting (E_ALL)을 삽입하여 오류를 활성화 한 다음 실행하십시오. 어떤 오류가 발생 했든 공유하십시오. 또한 누군가가 당신을 도울 수 있도록 열 세부 정보를 공유하십시오. –

답변

0

만약 내가 제대로 이해하고 하나

0

나는 가정 당신의 order_id는 기본 키 및 auto_increment입니다. 당신은 떠날 수

INSERT INTO Orders (product) VALUES ('Cakes') 

또는 당신이 정말로 그것을 삽입 할 경우 주위 '가, 다음은 문자열로 해석됩니다 따옴표를 추가하는 경우, 다음

INSERT INTO Orders (order_id, product) VALUES (NULL, 'Cakes') 

를 사용합니다. 그리고 그것은 문자열이 아니고 정수가 아니기 때문에 구문 오류가 발생할 것입니다.

+0

누가 이것을 왜곡했는지 이유를 설명하는 데 초대 받았습니다. –

3

"다른 SQL 항목을 기반으로하는 정보를 사용하여 여러 SQL 항목을 보내야합니다." 다음 방법이 시도하는 것보다 효율적입니다. 내가 구문 오류가있을 수 있으므로 php 나 mysql을 사용하지 않습니다.

insert into orders 
(product) 
select product 
from cart 
where username = $user 

10 개 개의 항목에있는 사람을 제한하려는 경우 지금까지 한계 (10)가 간다, 만 10 행이 카트 테이블에 갈 수 있도록 뭔가를해야한다.

0

당신은이 같은 단일 SQL 문 뭔가에서이 작업을 수행 할 수 있어야합니다 ..

INSERT INTO Orders(order_id,product) 
SELECT null,product 
FROM cart 
WHERE username = $name  
LIMIT 0,10 

이 더욱 리팩토링 난 당신이 아마 수행 null 값을 삽입 할 필요가없는 제안 :

INSERT INTO Orders(product) 
SELECT product 
FROM cart 
WHERE username = $name  
LIMIT 0,10 

테이블이 order_id col에서 NULL을 허용하도록 구성되어 있으면 기본적으로 null로 채워집니다. 댄 그냥 나던 많은 포인트가

<?php 
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_database'); 

/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

$stmt = $mysqli->prepare("SELECT product FROM `cart` WHERE username = ? LIMIT 10"); 
$stmt->bind_param('s', $user); 
$stmt->execute(); 
$stmt->bind_result($product); 

while($stmt->fetch()) { 
     $tvalue[] = $product; 
} 


$stmt = $mysqli->prepare("INSERT INTO Orders (product) VALUES (?)"); 
$stmt->bind_param("s", $one); 

foreach ($tvalue as $one) { 
     $stmt->execute(); 
} 

printf("%d Row inserted.\n", $stmt->affected_rows); 

/* close statement and connection */ 
$stmt->close(); 

/* close connection */ 
$mysqli->close(); 
?> 
1

Mysqli 예에 제한을 두는 것 같다 말했듯이

이 그리고 싶은 것은 고유의 쿼리를 전송하는 것입니다, 단일 쿼리 문자열 끝에 삽입 할 모든 값을 추가하여이 작업을 수행 할 수 있습니다.

<?php 
    // code 
    $sql=mysql_query("SELECT product FROM cart WHERE username='".$user."' LIMIT 10"); 
    $result=mysql_query($sql); 
    if(mysql_num_rows($result)) { 
     $rowcart=mysql_fetch_row("$result"); 
     $sendorder="INSERT INTO Orders (order_id, product) VALUES ('NULL', '".$rowcart[0]."')"; 
     while($rowcart=mysql_fetch_row($result)) 
      $sendorder.=", ('NULL', '".$rowcart[0]."')"; 
     mysql_query($sendorder); 
    } 
    // code 
?> 
+0

몇 가지 설명을 추가하면 큰 도움이됩니다. –