将单个PHP mySQL更新转换为大规模mySQL更新

将单个PHP mySQL更新转换为大规模mySQL更新,mysql,curl,foreach,Mysql,Curl,Foreach,好的,谢谢你到现在为止的反馈,我有以下几点: <?php $servername = "localhost"; $username = "user"; $password = "pass"; $dbname = "madtags"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_e

好的,谢谢你到现在为止的反馈,我有以下几点:

<?php
$servername = "localhost";
$username = "user";
$password = "pass";
$dbname = "madtags";


// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 


$sql = mysqli_query($conn, "SELECT id from users");
$userinfo = array();

while ($row_user = $sql->fetch_assoc())
    $userinfo[] = $row_user;

foreach ($userinfo as $user) {

$url = "http://www.pdga.com/player/".$user['id'];
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$html = curl_exec($ch);
curl_close($ch);


$dom = new DOMDocument();
@$dom->loadHTML($html);

$xpath = new DomXPath($dom);
$class = 'current-rating';
$divs = $xpath->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $class ')]");

foreach($divs as $div) {
    preg_match('/Current Rating:\s+(\d+)/', $div->nodeValue, $results);
}

$sql = "UPDATE users SET rating=$results[1] WHERE id=id";

if ($conn->query($sql) === TRUE) {
    echo "Record updated successfully <br>";
} else {
    echo "Error updating record <br> " . $conn->error;
}

$conn->close();


}

?>
但我想我定义的是错误的,因为它在第一次运行后无法更新记录

想法

原创帖子

我正在创建一个竞赛网站,与一个全球网站使用的评级系统平行。因此,基本上我已经创建了下面的代码,要求从网站的评级

自从创建了它之后,成员基数大大膨胀。因此,为每个成员单独创建此代码不再有用。因此,我需要开发此代码,以便基本上针对MySQL表中的每一行运行(此代码大约每2周运行一次)


如果每个用户的评级不同,则必须为每个用户执行单独的update SQL语句。真的没有办法。如果要设置的值在每行中都不同,则无法执行批量更新,这是没有意义的。“更新”适用于行集,因此,如果希望以相同的方式更改行集,则可以,但如果每次更改都不同,则不能。除非你不是问这个?嗯,是的。每个人的评级是不同的,他们都可以在个人网站上找到(因为PDGA网站上的每个人都有一个唯一的ID),我知道他们需要单独运行,我只是想知道是否有一个聪明的方法来做到这一点,而不是必须为每个成员单独创建这样一个php文件。为什么您必须为每个成员创建一个新文件??假设您在数据库的users表中有必需的
ID
变量?如果是这样,那么只需从数据库中检索所有用户详细信息到一个数组中,逐个循环,并为每个用户运行现有代码,每次都传递特定的用户详细信息(您可以将此代码放入函数中,以便可以使用不同的参数重复调用)。Myes您知道我在寻找什么。老实说,这远远超出了我的想象,因为我花了一段时间才达到现在的水平,而现在随着成员数量的快速增加,我自己还没有时间学习足够的php来简化这项工作。我将研究如何将表加载到数组中,这听起来是一个很好的解决方案。嗯,这个愚蠢的问题我敢肯定,但你会如何在url中插入一个值(请参见$url=“***ID***”;)这只是字符串的连接。假设变量中有ID,则类似于
$url=”http://pdga.com/player/“$id
Record updated successfully 
Error updating record 
Error updating record 
Error updating record 
Error updating record 
Error updating record 
<?php 
$servername = "localhost";
$username = "user";
$password = "pass";
$dbname = "madtags";
$url = "http://www.pdga.com/player/***ID***";
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$html = curl_exec($ch);
curl_close($ch);

$dom = new DOMDocument();
@$dom->loadHTML($html);

$xpath = new DomXPath($dom);
$class = 'current-rating';
$divs = $xpath->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $class ')]");

foreach($divs as $div) {
    preg_match('/Current Rating:\s+(\d+)/', $div->nodeValue, $results);
}

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "UPDATE users SET rating=$results[1] WHERE id=***ID***";

if ($conn->query($sql) === TRUE) {
    echo "Record updated successfully";
} else {
    echo "Error updating record: " . $conn->error;
}

$conn->close();
?>