2012-04-04 66 views
0

我正在开发一个应用程序,它根据从另一个表中选择的值更新表中的数据。我搜查了网络,并试图修改一些样本以适应我的需要,但仍然无法正常工作。使用Php和MySQL更新表数据时循环使用

下面是我的一些代码:是越来越填充

$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); 
} 

没有。我必须改变循环的类型吗?

+0

你错过了'“''上$行[”滴滴涕']',这将导致脚本给出一个错误。 – Nick 2012-04-04 12:43:56

+1

上面有几个语法错误,当你缩进合理编码时,这会更加明显。 – DaveRandom 2012-04-04 12:48:55

+0

我改变了它。仍然没有发生。 – greatak 2012-04-04 12:48:55

回答

2

试试这个代码,它应该做在单个查询整个操作:

$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); 
+0

+1不错的完整SQL选项 – Baba 2012-04-04 13:01:10

0

AS你给可能有问题,你的变量变化$ ddt_1至$ DDT在SQL语句

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); 
    } 
0

改进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' 

我希望这有助于

感谢

:)

+0

感谢您的回复...更改了它...但不工作 – greatak 2012-04-04 12:55:23

+0

是因为您没有关闭大部分字符串..我只是为您添加了改进的PHP选项 – Baba 2012-04-04 12:59:59

0

首先要注意的事情是,mysqli_fetch_assoc()只取一行,该行的地方游标是。然后它将光标移动一行。当光标到达数据末尾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,您确定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); 
    } 
}