Php 只向我的SQL数据库写入一行
我试图将一行从一个表移动到另一个表,但它不起作用。它的第一行很好,但我没有什么可以让其余的回声出来好,只是不进入我的数据库Php 只向我的SQL数据库写入一行,php,mysql,sql,Php,Mysql,Sql,我试图将一行从一个表移动到另一个表,但它不起作用。它的第一行很好,但我没有什么可以让其余的回声出来好,只是不进入我的数据库 $result = mysql_query("SELECT * FROM coffees WHERE id='$id'"); while($row = mysql_fetch_array($result)) { mysql_query("INSERT INTO coffeeorder(coffeetype,topping,shots,milk,size,price)
$result = mysql_query("SELECT * FROM coffees WHERE id='$id'");
while($row = mysql_fetch_array($result)) {
mysql_query("INSERT INTO coffeeorder(coffeetype,topping,shots,milk,size,price) VALUES ('coffeetype', 'topping', 'shots', 'milk', 'Size', 'price')");
echo $row['coffeetype'] . " " . $row['topping']." " . $row['shots']." " . $row['milk']." " . $row['size']." $" . $row['price']."<br />";
$totalPrice = $totalPrice + $row['price'];
}
$result=mysql\u查询(“从咖啡中选择*,其中id='$id');
while($row=mysql\u fetch\u数组($result)){
mysql_查询(“插入咖啡订单(咖啡类型、顶部、镜头、牛奶、大小、价格)值(‘咖啡类型’、‘顶部’、‘镜头’、‘牛奶’、‘大小’、‘价格’)”);
echo$row['coffeetype']....$row['topping'.....$row['shots'.]..$row['milk'.]...$row['size'..“$”.$row['price'.“
”;
$totalPrice=$totalPrice+$row['price'];
}
你知道为什么这不起作用吗
完整代码:
<?php
session_start();
if(isset($_SESSION["id"])){
$id = $_SESSION["id"];
$name = $_SESSION["name"];
}else {header('Location: index.php');}
include_once "dbcon.php";
$totalPrice = 0;
$result = mysql_query("SELECT * FROM coffees WHERE id='$id'");
while($row = mysql_fetch_array($result))
{
mysql_query("INSERT INTO `coffeeorder`(`coffeetype`,`topping`,`shots`,`milk`,`size`,`price`) VALUES ('".$row['coffeetype']."', '".$row['topping']."', '".$row['shots']."', '".$row['milk']."', '".$row['size']."', '".$row['price']."')");
echo $row['coffeetype'] . " " . $row['topping']." " . $row['shots']." " . $row['milk']." " . $row['size']." $" . $row['price']."<br />";
$totalPrice = $totalPrice + $row['price'];
}
echo "Total Price $".$totalPrice;
?>
请尝试移动到PDO:
<?php
$db = new PDO('mysql:host=localhost;dbname=testdb;charset=UTF-8', 'username', 'password', array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
$stmt = $db->query("SELECT * FROM coffees WHERE id=:id");
$stmt->execute(array(':id' => $id));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$stmt = $db->query("INSERT INTO coffeeorder(coffeetype,topping,shots,milk,size,price) VALUES (:coffeetype, :topping, :shots, :milk, :size, :price)");
$stmt->execute(array(':coffeetype' => $row['coffeetype'], ':topping' => $row['topping'],':shots' => $row['shots'],':milk' => $row['milk'],':size' => $row['size'],':price' => $row['price']));
echo $row['coffeetype'] . " " . $row['topping']." " . $row['shots']." " . $row['milk']." " . $row['size']." $" . $row['price']."<br />";
$totalPrice = $totalPrice + $row['price'];
?>
请尝试移动到PDO:
<?php
$db = new PDO('mysql:host=localhost;dbname=testdb;charset=UTF-8', 'username', 'password', array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
$stmt = $db->query("SELECT * FROM coffees WHERE id=:id");
$stmt->execute(array(':id' => $id));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$stmt = $db->query("INSERT INTO coffeeorder(coffeetype,topping,shots,milk,size,price) VALUES (:coffeetype, :topping, :shots, :milk, :size, :price)");
$stmt->execute(array(':coffeetype' => $row['coffeetype'], ':topping' => $row['topping'],':shots' => $row['shots'],':milk' => $row['milk'],':size' => $row['size'],':price' => $row['price']));
echo $row['coffeetype'] . " " . $row['topping']." " . $row['shots']." " . $row['milk']." " . $row['size']." $" . $row['price']."<br />";
$totalPrice = $totalPrice + $row['price'];
?>
您还可以在一个查询中执行插入和选择操作:
INSERT INTO `coffeeorder` (
`coffeetype`,
`topping`,
`shots`,
`milk`,
`size`,
`price`
)
SELECT
`coffeetype`,
`topping`,
`shots`,
`milk`,
`size`,
`price`
FROM `coffees`
WHERE `id`='$id'
但是,这会导致在多个表中重复数据。你真正应该做的是将你的桌子设置得稍微不同,在咖啡订购表中,不要存储关于咖啡的所有信息,只存储咖啡的id。然后在查询订单时,您可以加入咖啡桌并获取咖啡信息
SELECT
`coffee`.`coffeetype`,
`coffee`.`topping`,
`coffee`.`shots`,
`coffee`.`milk`,
`coffee`.`size`,
`coffee`.`price`
FROM `coffeeorder`
JOIN `coffee`
ON `coffee`.`id`=`coffeeorder`.`coffee_id`
这是数据库最擅长的功能(我想除了存储数据之外)。您还可以在一个查询中执行插入和选择操作:
INSERT INTO `coffeeorder` (
`coffeetype`,
`topping`,
`shots`,
`milk`,
`size`,
`price`
)
SELECT
`coffeetype`,
`topping`,
`shots`,
`milk`,
`size`,
`price`
FROM `coffees`
WHERE `id`='$id'
但是,这会导致在多个表中重复数据。你真正应该做的是将你的桌子设置得稍微不同,在咖啡订购表中,不要存储关于咖啡的所有信息,只存储咖啡的id。然后在查询订单时,您可以加入咖啡桌并获取咖啡信息
SELECT
`coffee`.`coffeetype`,
`coffee`.`topping`,
`coffee`.`shots`,
`coffee`.`milk`,
`coffee`.`size`,
`coffee`.`price`
FROM `coffeeorder`
JOIN `coffee`
ON `coffee`.`id`=`coffeeorder`.`coffee_id`
这是数据库最擅长的功能(我想不是存储数据)。选择行,插入行,然后删除行-问题出在哪里?请避免在新代码中使用
mysql\ucode>函数。请改用PDO或MySQLi。请停止在新应用程序中使用mysql\u query
。如果使用不当,这个尘土飞扬、过时的界面可能会对您的应用程序造成严重损害。在创建一个充满漏洞的应用程序之前,您需要了解它会被完全打开。较新的接口,如mysqli
和PDO,使编写和执行查询变得非常容易,因此学习查询所需的短时间是值得的。那么你说你想移动一行?那么,为什么要进行while
循环呢?此外,是否存在任何警告或错误?是否已启用显示错误
?“第一行”是什么意思?很公平。我觉得这个帖子里已经有足够多的胡说八道了。是时候建议您发布这两个表的数据结构了。选择行,插入行,然后删除行-有什么问题?请避免在新代码中使用mysql\uu
函数。请改用PDO或MySQLi。请停止在新应用程序中使用mysql\u query
。如果使用不当,这个尘土飞扬、过时的界面可能会对您的应用程序造成严重损害。在创建一个充满漏洞的应用程序之前,您需要了解它会被完全打开。较新的接口,如mysqli
和PDO,使编写和执行查询变得非常容易,因此学习查询所需的短时间是值得的。那么你说你想移动一行?那么,为什么要进行while
循环呢?此外,是否存在任何警告或错误?是否已启用显示错误
?“第一行”是什么意思?很公平。我觉得这个帖子里已经有足够多的胡说八道了。是时候建议你发布两个表的数据结构了。我就是这样做的,但还是第一行,然后什么都没有。不!这不是组合查询的方式。这甚至与有效的SQL相差很远。我猜他投了反对票,因为你最初把mysql_uuu任何东西都放进去了。但不是每个人都有选择的余地。有时我继承了大量的php项目,这些项目需要几个月的时间来重写,而且没有预算。。。我觉得这很粗鲁。我在投票。如果你必须使用mysql\u query
,那么你必须使用mysql\u real\u escape\u string
,没有借口。最初的示例甚至没有费心转义,它只是将$row
变量中的值挂在那里,这意味着如果这些字段中的任何一个包含“
,整个过程都会爆炸。这个PDO版本是正确的方法。我就是这样做的,但仍然只是第一排,然后什么都没有!这不是组合查询的方式。这甚至与有效的SQL相差很远。我猜他投了反对票,因为你最初把mysql_uuu任何东西都放进去了。但不是每个人都有选择的余地。有时我继承了大量的php项目,这些项目需要几个月的时间来重写,而且没有预算。。。我觉得这很粗鲁。我在投票。如果你必须使用mysql\u query
,那么你必须使用mysql\u real\u escape\u string
,没有借口。最初的示例甚至没有费心转义,它只是将$row
变量中的值挂在那里,这意味着如果这些字段中的任何一个包含“
,整个过程都会爆炸。这个PDO版本是正确的方法。