[英]Loop In Updating Table Data With Php And MySQL
我正在开发一个应用程序,它根据从另一个表中选择的值更新表中的数据。 我搜索了 .net,并尝试修改一些示例以满足我的需要,但仍然无法正常工作。
下面是我的一些代码:
$sync_2 = "
select pin,ddt_1
from purchases
where (amount_to_repay-amount_repaid)>0
and status like 'U%'
and counter=1
";
$sync_2_res = mysqli_query($link, $sync_2);
$row = mysqli_fetch_assoc($sync_2_res);
$data = mysqli_num_rows($sync_2_res);
$i;
for ($i = 0; $i <= $data; $i++) {
$pin = $row['pin'];
$ddt = $row['ddt_1'];
$sql = "
update deductions
set amount = '$ddt_1'
where pin = '$pin';
$result = mysqli_query($link,$sql);
}
什么都没有得到填充。 我必须更改循环类型吗?
试试这段代码,它应该在一个查询中完成整个操作:
$query = "
UPDATE `deductions` `d`
JOIN `purchases` `p` ON `p`.`pin` = `d`.`pin`
SET `d`.`amount` = `p`.`ddt_1`
WHERE
(`p`.`amount_to_repay` - `p`.`amount_repaid`) > 0
AND `p`.`status` LIKE 'U%'
AND `p`.`counter` = 1
";
$result = mysqli_query($link, $query);
正如您所给出的那样,在 sql 语句中将变量 $ddt_1 更改为 $ddt 可能存在问题
for($i=0;$i<=$data;$i++)
{
$pin=$row['pin'];
$ddt=$row['ddt_1];
$sql="update
deductions
set amount='$ddt'
where pin='$pin';
$result=mysqli_query($link,$sql);
}
改进的 PHP 示例
$mysqli = new mysqli ( "localhost", "root", "", "test" );
$sql = "SELECT pin , ddt_1 from purchases WHERE amount_to_repay-amount_repaid > 0 AND status like 'U%' AND counter = 1";
$sql2 = "update deductions set amount = '%s' where pin = '%s'; ";
$result = $mysqli->query($sql);
$row = null ;
while ($row = $result->fetch_assoc())
{
$mysqli->query(sprintf ( $sql, $row ['pin'], $row ['ddt_1'] ));
}
旧帖
代替
$ddt=$row['ddt_1];
和
$ddt=$row['ddt_1'];
代替
set amount='$ddt_1'
和
set amount='$ddt'
我希望这有帮助
谢谢
:)
首先要注意的是mysqli_fetch_assoc()只获取一行,即 cursor 所在的行。 然后它将 cursor 移动一排。 当 cursor 到达数据末尾时, mysqli_fetch_assoc()返回NULL 。
因此,为了遍历一组结果,人们通常使用while 循环,因为这是最简洁的:
$sync_2_res = mysqli_query($link, $sync_2);
if($sync_2_res == null) {
echo "The sync2 query failed: " . mysqli_error($link);
exit();
}
while($row = mysqli_fetch_assoc($result) {
// do something with $row
}
检查查询是否有效并返回结果而不是 FALSE 也是一个好主意。
接下来,我认为第二个查询中有一个拼写错误: $dtt_1
应该是$dtt
dtt ,你真的确定amount
字段应该设置为一个字符串吗?
无论如何,我将如何重写您的代码:
$sync_2= "select pin,ddt_1 from purchases "
. "where (amount_to_repay-amount_repaid)>0 "
. "and status like 'U%' and counter=1";
$sync_2_res=mysqli_query($link,$sync_2);
// check the query worked
if(!$sync_2_res) {
echo "The sync2 query failed: " . mysqli_error($link);
exit();
}
while($row = mysqli_fetch_assoc($result) {
// do something with $row
$pin=$row['pin'];
$ddt=$row['ddt_1'];
// note change from $ddt_1 to $dtt
$sql="update deductions set amount='$ddt' where pin='$pin';";
$result=mysqli_query($link,$sql);
// check query worked
if(!$result) {
echo "The 2nd query failed: " . mysqli_error($link);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.