我遇到了这种非常奇怪的情况。
我有一个 Mysql 服务器和一个应用程序服务器。应用程序服务器通过专用网络连接到 Mysql,我向两个用户授予 . 权限。
这是来自应用服务器的代码:
$db2 = new PDO('mysql:host=' . $host . ';dbname=' .$database. ';charset=utf8mb4', $userid, $db_password);
$db2->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db2->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$somequery = $db2->query('SELECT mail,message_id from mc_mails');
$somequery->execute();
$somedata = $somequery->fetchAll(\PDO::FETCH_ASSOC);
pretty_print($somedata); //my own <pre>print_r()</pre> function
var_dump($somedata); //shows raw dump
//so below I try to do again in a try loop to get Exception, and there's no exception.
try {
$somequery->execute();
while ($row = $somequery->fetch(PDO::FETCH_ORI_NEXT)) {
pretty_print($row);
}
} catch (PDOException $e) {
echo $e->getMessage();
}
以上结果如下:
这是来自 pretty_print() 的:
Array
(
[0] => Array
(
[mail] => 20
[message_id] => <2061A721-82BE-48EC-BA44-D2CD6D6DAC00@gmail.com>
)
[1] => Array
(
[mail] => 21
[message_id] => <8064AD4C-7C30-499B-8D83-E7DBABADCF36@gmail.com>
)
[2] => Array
(
[mail] => 22
[message_id] =>
)
[3] => Array
(
[mail] => 23
[message_id] =>
)
[4] => Array
(
[mail] => 24
[message_id] =>
)
[5] => Array
(
[mail] => 25
[message_id] =>
)
[6] => Array
(
[mail] => 26
[message_id] =>
)
[7] => Array
(
[mail] => 27
[message_id] => <850E2143-F797-4B6B-8F29-1004EEBCC0D2@gmail.com>
)
[8] => Array
(
[mail] => 28
[message_id] =>
)
[9] => Array
(
[mail] => 29
[message_id] =>
)
[10] => Array
(
[mail] => 30
[message_id] => <59DED427-255B-45EB-AC10-172FD49D529D@gmail.com>
)
[11] => Array
(
[mail] => 31
[message_id] => <50360840-52AD-44FE-9257-B51610F36171@gmail.com>
)
[12] => Array
(
[mail] => 34
[message_id] =>
)
[13] => Array
(
[mail] => 35
[message_id] =>
)
)
这是来自 var_dump():
array(14) { [0]=> array(2) { ["mail"]=> int(20) ["message_id"]=> string(48) "<2061A721-82BE-48EC-BA44-D2CD6D6DAC00@gmail.com>" } [1]=> array(2) { ["mail"]=> int(21) ["message_id"]=> string(48) "<8064AD4C-7C30-499B-8D83-E7DBABADCF36@gmail.com>" } [2]=> array(2) { ["mail"]=> int(22) ["message_id"]=> string(48) "" } [3]=> array(2) { ["mail"]=> int(23) ["message_id"]=> string(48) "" } [4]=> array(2) { ["mail"]=> int(24) ["message_id"]=> string(48) "" } [5]=> array(2) { ["mail"]=> int(25) ["message_id"]=> string(48) "" } [6]=> array(2) { ["mail"]=> int(26) ["message_id"]=> string(48) "" } [7]=> array(2) { ["mail"]=> int(27) ["message_id"]=> string(48) "<850E2143-F797-4B6B-8F29-1004EEBCC0D2@gmail.com>" } [8]=> array(2) { ["mail"]=> int(28) ["message_id"]=> string(48) "" } [9]=> array(2) { ["mail"]=> int(29) ["message_id"]=> string(48) "" } [10]=> array(2) { ["mail"]=> int(30) ["message_id"]=> string(48) "<59DED427-255B-45EB-AC10-172FD49D529D@gmail.com>" } [11]=> array(2) { ["mail"]=> int(31) ["message_id"]=> string(48) "<50360840-52AD-44FE-9257-B51610F36171@gmail.com>" } [12]=> array(2) { ["mail"]=> int(34) ["message_id"]=> string(48) "" } [13]=> array(2) { ["mail"]=> int(35) ["message_id"]=> string(48) "" } }
这是来自获取循环:
Array
(
[mail] => 20
[0] => 20
[message_id] => <2061A721-82BE-48EC-BA44-D2CD6D6DAC00@gmail.com>
[1] => <2061A721-82BE-48EC-BA44-D2CD6D6DAC00@gmail.com>
)
Array
(
[mail] => 21
[0] => 21
[message_id] => <8064AD4C-7C30-499B-8D83-E7DBABADCF36@gmail.com>
[1] => <8064AD4C-7C30-499B-8D83-E7DBABADCF36@gmail.com>
)
Array
(
[mail] => 22
[0] => 22
[message_id] =>
[1] =>
)
Array
(
[mail] => 23
[0] => 23
[message_id] =>
[1] =>
)
Array
(
[mail] => 24
[0] => 24
[message_id] =>
[1] =>
)
Array
(
[mail] => 25
[0] => 25
[message_id] =>
[1] =>
)
Array
(
[mail] => 26
[0] => 26
[message_id] =>
[1] =>
)
Array
(
[mail] => 27
[0] => 27
[message_id] => <850E2143-F797-4B6B-8F29-1004EEBCC0D2@gmail.com>
[1] => <850E2143-F797-4B6B-8F29-1004EEBCC0D2@gmail.com>
)
Array
(
[mail] => 28
[0] => 28
[message_id] =>
[1] =>
)
Array
(
[mail] => 29
[0] => 29
[message_id] =>
[1] =>
)
Array
(
[mail] => 30
[0] => 30
[message_id] => <59DED427-255B-45EB-AC10-172FD49D529D@gmail.com>
[1] => <59DED427-255B-45EB-AC10-172FD49D529D@gmail.com>
)
Array
(
[mail] => 31
[0] => 31
[message_id] => <50360840-52AD-44FE-9257-B51610F36171@gmail.com>
[1] => <50360840-52AD-44FE-9257-B51610F36171@gmail.com>
)
Array
(
[mail] => 34
[0] => 34
[message_id] =>
[1] =>
)
Array
(
[mail] => 35
[0] => 35
[message_id] =>
[1] =>
)
我不知道为什么有些数组是空的。请注意 var_dump
结果显示有 48 的字符串,但它仍然是空的。
该循环还在数组中显示了一些内容,但它从未被打印出来。但是,我直接在 ssh 中使用的完全相同的查询为我提供了以下内容。所有字段均已设置。
我不确定这是否是问题所在,但我的 message_id
是 varchar(1000)
- 是的,它很大,但我才刚刚开始了解电子邮件 header ,我读到 rfc 大约有 1000 个字符的消息 ID,但我怀疑它是否超过了这个。
需要帮助请。我卡住了。
编辑:这也发生在许多领域,为了清楚起见,我只选择一个领域。
最佳答案
您正在向浏览器中转储,这些消息 ID 具有 <>
,这意味着它们被呈现为未知/非法的 html 标签。查看页面的源代码,您会看到它们在那里
我猜确实出现的前两个是用 <...>
编码的, 因此它们显示为文本,而不是呈现为 html。
关于php - PDO Mysql 没有正确返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38058424/