1

我有一个大型数据库(这个特定表中有 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 Done4132 次。我不确定这里的逻辑,但感谢任何帮助使其正常工作。

4

1 回答 1

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。

于 2012-12-18T01:04:56.997 回答