PHP更新大型数据库

时间:2012-12-18 00:54:01

标签: php database pdo

我有一个大型数据库(这个特定表中有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次。我不确定这里的逻辑,但是对于让这项工作有任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:3)

我同意Dagon的说法,数据库不是那个地方(如果明天你决定<span>应该包装另一个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。