SQL/PHP使用$row插入多行
所以我的问题是,我需要使用基于另一个SQL条目的信息发送多个SQL条目 我已经简化了我正在使用的代码,因此很容易理解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 = 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)来帮助您启用错误,然后运行它。无论你看到什么错误,都要分享。另外,分享专栏的详细信息,以便有人可以帮助你添加一些解释,这将是一个很好的答案。添加一些解释,这将是一个很好的答案。