当VARCHAR字段内的文本被尖括号('<'和'>'字符)包围时,我很难从MySQL数据库中获取数据。
让我更具体一点。这是我从中获取数据的表:
mysql> describe msgs; +---------------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+---------------------+------+-----+---------+-------+ | partition_tag | int(11) | NO | PRI | 0 | | | mail_id | varbinary(16) | NO | PRI | NULL | | | secret_id | varbinary(16) | YES | | | | | am_id | varchar(20) | NO | | NULL | | | time_num | int(10) unsigned | NO | MUL | NULL | | | time_iso | char(16) | NO | | NULL | | | sid | bigint(20) unsigned | NO | MUL | NULL | | | policy | varchar(255) | YES | | | | | client_addr | varchar(255) | YES | | | | | size | int(10) unsigned | NO | | NULL | | | originating | char(1) | NO | | | | | content | char(1) | YES | | NULL | | | quar_type | char(1) | YES | | NULL | | | quar_loc | varbinary(255) | YES | | | | | dsn_sent | char(1) | YES | | NULL | | | spam_level | float | YES | | NULL | | | message_id | varchar(255) | YES | MUL | | | | from_addr | varchar(255) | YES | | NULL | | | subject | varchar(255) | YES | | | | | host | varchar(255) | NO | | NULL | | +---------------+---------------------+------+-----+---------+-------+ mysql> select * from msgs LIMIT 1; +---------------+--------------+--------------+----------+------------+------------------+-----+--------+--------------+------+-------------+---------+-----------+--------------+----------+------------+-------------------------------+----------------------------------------+---------+--------------------+ | partition_tag | mail_id | secret_id | am_id | time_num | time_iso | sid | policy | client_addr | size | originating | content | quar_type | quar_loc | dsn_sent | spam_level | message_id | from_addr | subject | host | +---------------+--------------+--------------+----------+------------+------------------+-----+--------+--------------+------+-------------+---------+-----------+--------------+----------+------------+-------------------------------+----------------------------------------+---------+--------------------+ | 0 | 0qJcjCXZM8K3 | 7a8Q1_crCzuj | 02085-01 | 1365578237 | 20130410T071717Z | 4 | MYNETS | 172.31.255.5 | 1246 | Y | V | Q | 0qJcjCXZM8K3 | N | -1 | <51651189.9080705@test.it> | User Name <test@test.it> | test | localhost | +---------------+--------------+--------------+----------+------------+------------------+-----+--------+--------------+------+-------------+---------+-----------+--------------+----------+------------+-------------------------------+----------------------------------------+---------+--------------------+
当通过PHP MySQLi接口执行查询时(例如:来自msgs的SELECT *),from_addr字段仅显示第一部分(在本例中为“用户名”),但不显示内部的文本尖括号(在这种情况下为“test@test.it”)。
目前,我通过在mysql查询中使用REPLACE语句来解决它,用方括号替换尖括号。但是,我想知道如何正确查询尖括号内的文本。
谢谢大家。
答案 0 :(得分:1)
如果您收到查询结果,from_addr
的输出就会出现。
看一下这个例子:
$string = '<hello world>';
echo $string;
echo htmlspecialchars('<hello world>');
然而,echo $string
将显示在源代码中,但被视为标记,因此不会显示在“屏幕上”。
使用htmlspecialchars()
会将< >
更改为< >
,这会在屏幕上显示。
您似乎将此字段用于电子邮件,因此我建议不要使用htmlspecialchars
保存到数据库,因为您希望电子邮件能够正常发送。
如果以上内容没有完全回答您的问题,并且您希望在数据库中查询电子邮件而不是“发送名称”,我建议您使用LIKE
:
SELECT * FROM `msgs` WHERE `from_addr` LIKE '<%INSERT_EMAIL_ADDRESS%>'.
希望这有帮助。