角括号mysql php

时间:2013-04-12 17:34:56

标签: php mysql select mysqli brackets

当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语句来解决它,用方括号替换尖括号。但是,我想知道如何正确查询尖括号内的文本。

谢谢大家。

1 个答案:

答案 0 :(得分:1)

如果您收到查询结果,from_addr的输出就会出现。

看一下这个例子:

$string = '<hello world>';
echo $string;
echo htmlspecialchars('<hello world>');

然而,echo $string将显示在源代码中,但被视为标记,因此不会显示在“屏幕上”。

使用htmlspecialchars()会将< >更改为&lt; &gt;,这会在屏幕上显示。

您似乎将此字段用于电子邮件,因此我建议不要使用htmlspecialchars保存到数据库,因为您希望电子邮件能够正常发送。

如果以上内容没有完全回答您的问题,并且您希望在数据库中查询电子邮件而不是“发送名称”,我建议您使用LIKE

SELECT * FROM `msgs` WHERE `from_addr` LIKE '<%INSERT_EMAIL_ADDRESS%>'.

希望这有帮助。