首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从代码中读取字段,处理数据,将值保存到行中的新文件

从代码中读取字段,处理数据,将值保存到行中的新文件
EN

Stack Overflow用户
提问于 2012-04-18 09:11:56
回答 2查看 69关注 0票数 0

所以这就是我要做的。

  1. 在for循环中读取一行。2.将正确的字段数据设置为变量。3.根据提取的字段对req数据进行操作。4.更新filed=extracted data.

中的新字段

另外,我正在将当前位置添加到文件中,以便脚本可以在下次运行时继续运行。

问题:它似乎不起作用。counter.txt获得类似于3-4的值,但它只是驻留在那里。我的数据库有大约1000 K行。

我的代码:

代码语言:javascript
复制
require ("dbconnect.php");
header("refresh:29;url=process.php"); // so it doesnt ever end. I cant use max_execution_time here for some reason.
$count = mysql_query("SELECT COUNT(*) FROM collection ");
$data = mysql_fetch_array($count);
$count = $data[0];
echo $count;

$countfile = fopen("counter.txt", "r");
$counter = fgets($countfile);
echo fgets($countfile);

while (fgets($countfile) <= $count)
 {
$i = fgets($countfile);
$takeword = mysql_query("SELECT word FROM collection WHERE id='$i'") or die();
$wd = mysql_fetch_array($takeword);
$data = $wd[0];

$d1 = hash($algorith='md2',$data);
$d2 = hash($algorith='md4',$data);



$write = mysql_query("UPDATE collection SET md2='$d1', md4='$d2' WHERE id='$i'") or die(mysql_error());

//opens, empties and write the new pointer to the file. closes, and open the file in readmode for the next read at the loop.
$counts = fopen("counter.txt", "w+");
fwrite($counts, $counter + 1);
fclose($counts);
$countfile = fopen("counter.txt", "r");
}

任何帮助都将不胜感激:)寻找代码优化和消除错误。建议就行了。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-29 17:12:15

好吧,我会做这样的事情(抱歉,我一直忘记了延迟的反应)。

代码语言:javascript
复制
<?php
    //main execution
    $sql = mysql_connect(...);
    if (!$sql)
        die ("No database connection");

    if (!mysql_select_db(..., $sql))
        die ("Database does not exist in this schema");

    //Run the query for this iteration.
    processQuery();
    //---

    function getQueryOffset($file)
    {
        $offset = 0; //default offset
        if (file_exists($file)) //check if the counter file exists
        {
            $contents = file_get_contents($file); //get the contents of the counter
            if ($contents !== FALSE && is_numeric($contents)) //check if an appropriate counter value
                $offset = intval($contents);
        }
        return $offset;
    }

    function processQuery()
    {
        $table = "collection"; //table to update
        $counter = "counter.txt"; //where to look for the last execution's offset.
        $maxrows = 10000; //update 10,000 rows each time this file is loaded.
        $sql = $GLOBALS['sql'];

        //calculate the number of rows in the table
        $qCount = mysql_query("SELECT COUNT(*) max FROM $table", $sql);
        $aCount = mysql_fetch_assoc($qCount);
        mysql_free_result($qCount);
        $max = $aCount["max"];

        $offset = getQueryOffset($counter); //calculate the offset (or a default 0)
        if ($offset < $max) //if offet >= max, we're done.
        {
            $qUpdate = mysql_query("SELECT word, id FROM $table LIMIT $offset, $maxrows", $sql); //get the next "maxrows" rows from the table.
            if ($qUpdate) 
            {
                $assoc = NULL;
                while (($assoc = mysql_fetch_assoc($qUpdate)) != NULL)
                {
                    $md4 = hash("md4", $assoc["word"]); //calculate the hashes
                    $md2 = hash("md2", $assoc["word"]); 
                    $id = $assoc["id"]; //id the row
                    mysql_query("UPDATE $table SET md2='$md2', md4='$md4' WHERE id=$id", $sql); //update the table columns
                }
                //update the offset in the counter file.
                file_put_contents($counter, ($offset + mysql_num_rows($qUpdate)));
                mysql_free_result($qUpdate);
            }
        }
    }

    mysql_close($sql);
?>
票数 0
EN

Stack Overflow用户

发布于 2012-04-18 09:29:36

1我在这里看到的问题:

检查您的更新查询--这似乎是错误的。在我看来,应该是“设定md2='$d1‘和md4='$d2'”

另一个我不确定的问题:

我不确定md2和md4是否是哈希算法的有效名称。

更好的方法是: 1.不要写到文件!2.在SQL中创建一个名为“status”的额外列,默认值为0。在更新时,将该值更改为1. 3。根据以下查询搜索要编辑的行:“选择status=0限制为0,1”的集合中的"SELECT word“。或者,如果原始表中的md2和md4列为空,则查询也可以是”从集合中选择单词,其中MD2=‘和MD4=’极限0,1“。

希望这能有所帮助。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10206288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档