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