将 html 标签从一个表复制到另一个表(yii2、mysql)

问题描述 投票:0回答:1

我需要将产品的描述从一个表复制到另一个表,一切正常,直到

<img src="url" width="50%" height="50%" />
标签出现在描述中。我有一个脚本,可以循环复制产品的描述:

$rowParse = Parsing::find()->where(['art_post' => $value])->one();
$desc = $rowParse->description;
Yii::$app->db->createCommand("UPDATE `products` SET `description`=:desc WHERE `id_post`=:id && `art_post`=:art")
->bindValues([':desc'=>$desc, ':id'=>$id_post, ':art'=>$art_post])->execute();

如果我复制单个产品的描述,它会根据需要工作 - 标签插入其属性,但如果我这样做,例如,循环中的 100 个产品,属性

width
height
就会消失,它会像
<img src="url" /> 一样插入

插入所有其他 html 标签(如 span、strong、td、tr、p)都可以正常工作。

我是编程世界的新手,所以我需要大佬的帮助:D 先谢谢你了

php mysql database yii yii2
1个回答
0
投票

确保

description
表中的
products
字段具有支持存储 HTML 的数据类型,例如
TEXT
LONGTEXT
。如果字段的类型类似于
VARCHAR
且长度有限,则可能会截断您的 HTML 内容。

确保当您从

Parsing
表检索描述时,HTML 内容未被编码或转义。当从数据库检索数据时,Yii 可能会自动转义 HTML 实体。您可以使用
Html::decode()
确保 HTML 不被编码:

 $desc = Html::decode($rowParse->description);

如果您要在循环中更新大量记录,您可能需要考虑将更新包装在事务中以确保数据一致性:

 $transaction = Yii::$app->db->beginTransaction();
 try {
     // Your loop and update logic here

     $transaction->commit();
 } catch (\Exception $e) {
     $transaction->rollBack();
     throw $e;
 }
This way, if an error occurs during the loop, the changes are rolled back, and your data remains consistent.

在代码中添加一些日志语句以查看正在检索和更新哪些值。这可以帮助您确定问题发生的位置。

 Yii::info('Description from Parsing table: ' . $desc, 'app');

然后您可以检查日志以查看更新时是否存在宽度和高度属性。

© www.soinside.com 2019 - 2024. All rights reserved.