1

大規模なデータベース (この特定のテーブル 1 つのテーブルに 28,000 エントリ) があり、テーブルのすべての列の前後にいくつかの 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

データベースはそのための場所ではないというダゴンに同意します (明日、<span>別の HTML タグをラップする必要があると判断したらどうしますか?)。

とにかく、1 回限りの操作のように聞こえるので、PHP は使用しません。MySQL クライアント (コマンド ライン mysqlまたはワークベンチ) を実行し、次のようなクエリを使用します。

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

UPDATE現在のコードに関する 1 つの注意:クエリを実行することはありません。prepareステートメントを実行するだけで、 を実行する代わりに、もう一度$update_query実行しています$query! そのため、常に同じ ID を出力しています。

于 2012-12-18T01:04:56.997 に答える