【问题标题】:PHP updating large databasePHP更新大型数据库
【发布时间】:2012-12-18 00:54:01
【问题描述】:

我有一个大型数据库(这个特定表一个表中有 28k 个条目),我需要在表中每一列的前面和后面附加一些 HTML 标记。

这是我的代码:

try
{
    $conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    if(!$conn)
    {
        echo "Error in connecting to the database.";
    }
    $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );  

    $query = $conn->query("SELECT `id`, `introtext` FROM *TABLE* WHERE id >= 41155");
    $query->setFetchMode(PDO::FETCH_OBJ);

    //For each row in the table
    while($row = $query->fetch())
    {
        $introtext = '<span class="*SPAN CLASS*">' . $row->introtext . '</span>';
        $update_query = $conn->prepare("UPDATE *TABLE* SET introtext = ? WHERE id = ?");

        if ($query->execute(array($introtext, $row->id))) 
            echo $row->id . " Done <br>";
        else 
            echo $row->id . " Err<br>";
    }

} catch(PDOexception $e) {
    echo $e->getMessage();
}

$conn = null;

当我运行脚本时,它会输出41155 Done 4132 次。我不确定这里的逻辑,但感谢任何帮助使其正常工作。

【问题讨论】:

  • 28k不算大,不要这样做,输出数据的时候加上html
  • 不幸的是我没有设计数据库或访问它的方式。我只需要解决它。无论如何,我必须添加一个跨度类,以便当逻辑端到达数据库时,一些 CSS 知道该做什么。
  • 这种耗时的过程应该写在脚本里,像this ffmpeg example一样通过shell_exec('your_script &')函数启动
  • 不管怎样,它已经以这种状态存在,格式和时间会禁止我更改它。
  • 我是否正确理解这将是一项一次性任务?

标签: php database pdo


【解决方案1】:

我同意 Dagon 的观点,即数据库不适合这样做(如果明天你决定 &lt;span&gt; 应该包装另一个 HTML 标记怎么办?)。

无论如何,这听起来像是一次性操作,所以我不会使用 PHP。只需运行 MySQL 客户端(命令行 mysql 或 Workbench,并使用如下查询:

UPDATE *TABLE* 
SET introtext = CONCAT('<span class="*SPAN CLASS*">', introtext, '</span>') 
WHERE id >= 41155

关于您当前代码的一个注意事项:您永远不会执行UPDATE 查询!您只需prepare 语句,然后您不再执行$update_query,而是再次执行$query!这就是为什么你总是打印相同的 id。

【讨论】:

  • 啊,我知道这很愚蠢。但是是的,我会先尝试将其作为 sql 查询运行。
猜你喜欢
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-19
  • 1970-01-01
  • 2017-04-28
  • 2018-03-24
相关资源
最近更新 更多