SQL / PHP使用$ row INSERT INTO多行

时间:2014-12-22 13:19:27

标签: php sql

所以我的问题是我需要使用基于另一个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')

5 个答案:

答案 0 :(得分:3)

你说,"我需要使用基于另一个SQL条目的信息发送多个SQL条目。"以下方法比您尝试的方法更有效。请注意,我既不使用php也不使用mysql,因此我可能会遇到一些语法错误。

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

就限制10而言,如果您想将此人限制为10个项目,您应该采取措施确保只有10行进入购物车表格。

答案 1 :(得分:1)

Mysqli示例

<?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();
 ?>

答案 2 :(得分:0)

我认为,您的order_id是主键,auto_increment。你可以离开:

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

或者如果你真的想插入它,那么使用

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

如果在它周围添加引号',那么它将被解析为字符串。因为,这不是字符串,而是整数,它将导致语法错误。

答案 3 :(得分:0)

您应该可以在单个SQL语句中执行此操作..

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

为了进一步重构,我建议您可能不需要插入空值,只需执行:

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

如果你的表的结构允许在order_id col中允许NULL,那么默认情况下这将被填充为null。

正如丹所说,似乎没有多大意义限制任何一个

答案 4 :(得分:0)

如果我理解正确,您要做的是发送一个唯一的查询,您可以通过在单个查询字符串的末尾附加要插入的每个值来执行此操作:

<?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
?>