Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL/PHP使用$row插入多行_Php_Sql - Fatal编程技术网

SQL/PHP使用$row插入多行

SQL/PHP使用$row插入多行,php,sql,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) V

所以我的问题是,我需要使用基于另一个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复制到每个条目的
部分,而不仅仅是复制值

示例输出:

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')

我假设您的
order\u id
是主键,
auto\u increment
。你可以留下:

INSERT INTO Orders (product) VALUES ('Cakes')
或者如果您真的想插入它,那么使用

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

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

我想,您的
order\u id
是一个主键,
auto\u increment
。你可以留下:

INSERT INTO Orders (product) VALUES ('Cakes')
或者如果您真的想插入它,那么使用

INSERT INTO Orders (order_id, product) VALUES (NULL, 'Cakes')
如果在其周围添加引号
,则它将被解析为字符串。由于这不是字符串,而是整数,因此会导致语法错误。

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

insert into orders
(product)
select product
from cart 
where username = $user
就限制10而言,如果您想将此人限制为10项,则应采取措施确保只有10行进入购物车表

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

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

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

您应该能够在一条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


正如Dan刚才所说,对这两种方法进行限制似乎都没有多大意义

您应该能够在一个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

正如Dan刚才所说,对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();
 ?>

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

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

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

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

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

通过放置错误报告(E_ALL)启用错误,然后运行它。无论你看到什么错误,都要分享。另外,共享列详细信息,以便有人可以通过放置错误报告(E_ALL)来帮助您启用错误,然后运行它。无论你看到什么错误,都要分享。另外,分享专栏的详细信息,以便有人可以帮助你添加一些解释,这将是一个很好的答案。添加一些解释,这将是一个很好的答案。