2017-04-17 89 views
1

我有一个简单的PHP代码:PHP MYSQL更新一些记录在while循环

$sql= 'SELECT ID, fb_postid, scheduled FROM `posts` WHERE clicks = "" AND fb_postid !="" AND scheduled < NOW() order by ID ASC LIMIT 10;'; 

$result = mysqli_query($link, $sql); 
print_r($result); 

while ($row = mysqli_fetch_assoc($result)) { 
      $clicks=fbcall($fbtoken, $row['fb_postid']); 
      $update="UPDATE `posts` SET `clicks`='".$clicks."' WHERE id='".$row['ID']."'"; 
      $result = mysqli_query($link, $update);  
      print("POSTID: " . $row['fb_postid'] . " - Clicks: " . $clicks ."<br>");  
}; 

MySQL的SELECT会从DB 10行循环遍历While循环线路,会从功能fbcall“点击”和那么应该更新所有10行的值从“点击”到数据库。如果我运行没有更新的代码,我得到10个结果打印,但如果我用mysqli_update运行,我只得到1行更新。任何人有任何想法为什么?

+0

您的代码很容易受到[** SQL注入攻击**](HTTPS://en.wikipedia。组织/维基/ SQL_injection)。你应该使用[** mysqli **](https://secure.php.net/manual/en/mysqli.prepare.php)或[** PDO **](https://secure.php.net/ manual/en/pdo.prepared-statements.php)准备带有绑定参数的语句,如[**这篇文章**]所述(https://stackoverflow.com/questions/60174/how-can-i-prevent-sql步喷射功能于PHP)。 –

+0

什么'mysqli_error($ link)'在查询中显示?如果您需要真实性,请使用UPDATE –

+0

上的'mysqli_affected_rows()'修正打印错误。谢谢。但没有区别。 – swapfile

回答

1

您正在使用$result变量遍历第一个查询中的行列表。

但是你给循环中的$结果一个新的值,清除那里的东西。

只要使用两个不同的变量,你会没事的。尝试是这样的:

$sql= 'SELECT ID, fb_postid, scheduled FROM `posts` WHERE clicks = "" AND fb_postid !="" AND scheduled < NOW() order by ID ASC LIMIT 10;'; 

$result = mysqli_query($link, $sql); 
print_r($result); 

while ($row = mysqli_fetch_assoc($result)) { 
      $clicks=fbcall($fbtoken, $row['fb_postid']); 
      $update="UPDATE `posts` SET `clicks`='".$clicks."' WHERE id='".$row['ID']."'"; 
      $result2 = mysqli_query($link, $update);  
      print("POSTID: " . $row['fb_postid'] . " - Clicks: " . $clicks ."<br>");  
}; 
+0

就是这样!大。非常感谢。 – swapfile

0

修正它,并准备更新语句建:

$sql= 'SELECT ID, fb_postid, scheduled FROM `posts` WHERE clicks = "" AND fb_postid !="" AND scheduled < NOW() order by ID ASC LIMIT 10;'; 
$result = mysqli_query($link, $sql); 
$qry = "UPDATE `posts` SET `clicks`=? WHERE id=?"; 
$stmt = mysqli_prepare ($link, $qry); 
mysqli_stmt_bind_param ($stmt, 'ss',$clicks, $id); 

while ($row = mysqli_fetch_assoc($result)) { 
      $clicks=fbcall($fbtoken, $row['fb_postid']); 
      $id=$row['ID']; 
      mysqli_stmt_execute($stmt); 
      print("POSTID: " . $row['fb_postid'] . " - Clicks: " . $clicks ."<br>");  
};