phpMyAdmin 在插入第一个 table 时执行触发器时在第二个 table 中存储一个随机数

phpMyAdmin storing a random number in the 2nd table on the execution of trigger made on insert of first table

我有一个名为 "Log_Data" 的 table,它有两个字段,

我有另一个名为 "Patient" 的 table,它有很多属性,其中 2 个是

现在,我正在尝试在 "patient" table 上的 "Insert" 上创建触发器。 选择在 "insert" 和 "after" 执行插入时触发。 触发器定义如下,

insert into log_data
 values(NOW(), 'New patient with Id  = ' + new.patient_id + ' and name = ' + new.p_name + ' is added')

请注意log_data的第一个属性是"log_date",第二个属性是"log_information"

完成后,我在"patient"table中做了一个新的插入,如下,

INSERT INTO patient(patient_id, p_name, p_gender, p_address, p_phone_no, p_age, p_CNIC, p_isolation_id, p_quarantine_id, p_city, p_province, p_status) VALUES ('7','Asad Hussain','Male','Lasani Town House #5-B','03041502627','23','3310256209012','1',NULL,'Faisalabad','Punjab','ACTIVE')

现在,命令执行成功...它也成功插入患者体内,但它不适用于 log_data table。 当我转到 log_data table 时,它显示正确添加的时间(即 log_date 很好)但是对于 log_information,它会在其中添加一些随机数。 我多次执行插入查询,这些是我得到的值,

2020-06-14
20200614232014

2020-06-14
20200614232209

2020-06-14
8

2020-06-14
8

2020-06-14
8
2020-06-14
8
2020-06-14
9

因此,我尝试将触发器从 "After" 更改为 "Before",但它仍然显示相同的错误。

然后我尝试将其数据类型从 varchar 更改为 "Text" 然后它开始仅在 log_information 中插入“8”(这些时候,我添加的条目的患者 ID 是'8') 然后我尝试插入患者 ID = 9 的患者记录,然后这一次,它在 log_information 中存储了“9”(这次我也将数据类型从 text 改回了 varchar(250))

所以我看到它的方式,现在它正在将 "patient_id" 插入 log_information 但是跳过了其余信息......此外,它为前两个插入添加了一些随机数,我仍然不明白为什么。

任何人都可以指导我如何解决这个问题以及如何存储我试图存储在 log_data table 中的实际字符串吗?

此外,是否可以使用触发器存储自动增量 log_id?这将在每个日志创建时存储其 ID(并且 log_id 将自动递增,这意味着我们不必在编写触发器时将其提供给 log_data 中的插入) 谢谢!

请您始终使用 CONCAT 来合并文本

insert into log_data
 values(NOW(), CONCAT('New patient with Id  = ', NEW.patient_id ,' and name = ' , NEW.p_name , ' is added'))