使用PHP和MySQL更新多行
我不熟悉php和mySql。我正在尝试使用php和mysql更新多行 我在更新MySQL数据库中的多行时遇到问题。它只更新数据库中表的最后一行。例如,用户单击查看产品。该页面将列出数据库中当前存在的10种产品。用户希望通过点击方式更新产品信息。完成更新后,用户单击提交 问题在于它只捕获和更新表中最后一个产品的信息。我试图将其放入foreach()函数中。但它不起作用 请帮忙。我刚学了PHP和mySQL不到一周。我非常感谢任何帮助使用PHP和MySQL更新多行,php,mysql,Php,Mysql,我不熟悉php和mySql。我正在尝试使用php和mysql更新多行 我在更新MySQL数据库中的多行时遇到问题。它只更新数据库中表的最后一行。例如,用户单击查看产品。该页面将列出数据库中当前存在的10种产品。用户希望通过点击方式更新产品信息。完成更新后,用户单击提交 问题在于它只捕获和更新表中最后一个产品的信息。我试图将其放入foreach()函数中。但它不起作用 请帮忙。我刚学了PHP和mySQL不到一周。我非常感谢任何帮助 <?php include 'dbconn.inc.php'
<?php
include 'dbconn.inc.php';
include 'functions.inc.php';
$sql = "SELECT * FROM products";
$res = $mysqli->query($sql);
while( $row = $res->fetch_array(MYSQLI_ASSOC) ){
$products($row['id']) = 'id';
}
$id = $mysqli->real_escape_string( $_POST['id'] );
$weight = $mysqli->real_escape_string( $_POST['weight'] );
$name = $mysqli->real_escape_string( $_POST['name'] );
$supplier_id = $mysqli->real_escape_string( $_POST['supplier_id'] );
$price = $mysqli->real_escape_string( $_POST['price'] );
$description = $mysqli->real_escape_string( $_POST['description'] );
foreach( $products as $id){
$sql = "UPDATE products
SET
`id` = '$id',
`weight` = '$weight',
`price` = '$price',
`name` = '$name',
`supplier_id` = '$supplier_id',
`description` = '$description'
WHERE `id` = '$id'";
}
有几个问题:
首先,声明变量$id
两次
您应该在循环中使用$key
而不是$value
相反,请尝试以下方法:
foreach( $products as $key => $value){
$sql = "UPDATE products
SET
`id` = '$id',
`weight` = '$weight',
`price` = '$price',
`name` = '$name',
`supplier_id` = '$supplier_id',
`description` = '$description'
WHERE `id` = '$key'";
}
使用数组键
而不是其值
的原因是,在下一行中,您将数组的键
设置为第一次查询返回的值:
while( $row = $res->fetch_array(MYSQLI_ASSOC) ){
$products($row['id']) = 'id';
}
我可能会建议这样做:
$products = array();
while( $row = $res->fetch_array(MYSQLI_ASSOC) ){
$products[]['id'] = $id;
}
foreach( $products as $product){
$sql = "UPDATE products
SET
`id` = '$id',
`weight` = '$weight',
`price` = '$price',
`name` = '$name',
`supplier_id` = '$supplier_id',
`description` = '$description'
WHERE `id` = '" . $product['id'] . "'";
}
你说“它不工作”是什么意思?看起来你从来没有试过运行queryPlease,不要这样逃避。使用和避免严重伤害。您是在哪里学会这样做的?查询正在运行,但它只更新了中的最后一行database@tadman我是从我的朋友那里学到的friend@user1754822老实说,我认为这是因为您两次声明了$id
。您是否试图将数据库中id
的值设置为$\u POST
数据?@user1754822我已更新,在您回复评论之前,我只能在此处猜测,但我认为您希望将值设置为POST数据,并更新foreach
中的行,对吗?@user1754822执行echo$sql
以确保查询在每个位置都具有您期望的值run@user1754822别麻烦了,是我的错。如果您使用了我发布的第二个解决方案,那么数组应该是这样制作的:$products[]['id']=$id代码>我认为你的部分是正确的。其他文件中可能存在问题。谢谢你的时间和帮助。祝你过得愉快!如果你打算将其发布到通用互联网上,你必须修复所有的问题。如果您甚至忘记转义一个变量,那么有很多方法可以做一长串可怕的事情,所以请尽快切换到使用占位符。