Привет, я застрял в этой действительно странной ситуации.PDO Mysql Не верно возвращает результаты
Я сервер 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();
}
выше дает мне следующие результаты
**This is from pretty_print() **
Array
(
[0] => Array
(
[mail] => 20
[message_id] => <[email protected]>
)
[1] => Array
(
[mail] => 21
[message_id] => <[email protected]>
)
[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] => <[email protected]>
)
[8] => Array
(
[mail] => 28
[message_id] =>
)
[9] => Array
(
[mail] => 29
[message_id] =>
)
[10] => Array
(
[mail] => 30
[message_id] => <[email protected]>
)
[11] => Array
(
[mail] => 31
[message_id] => <[email protected]>
)
[12] => Array
(
[mail] => 34
[message_id] =>
)
[13] => Array
(
[mail] => 35
[message_id] =>
)
)
** This is from var_dump() **
array(14) { [0]=> array(2) { ["mail"]=> int(20) ["message_id"]=> string(48) "<[email protected]>" } [1]=> array(2) { ["mail"]=> int(21) ["message_id"]=> string(48) "<[email protected]>" } [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) "<[email protected]>" } [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) "<[email protected]>" } [11]=> array(2) { ["mail"]=> int(31) ["message_id"]=> string(48) "<[email protected]>" } [12]=> array(2) { ["mail"]=> int(34) ["message_id"]=> string(48) "" } [13]=> array(2) { ["mail"]=> int(35) ["message_id"]=> string(48) "" } }
** This is from fetch loop**
Array
(
[mail] => 20
[0] => 20
[message_id] => <[email protected]>
[1] => <[email protected]>
)
Array
(
[mail] => 21
[0] => 21
[message_id] => <[email protected]>
[1] => <[email protected]>
)
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] => <[email protected]>
[1] => <[email protected]>
)
Array
(
[mail] => 28
[0] => 28
[message_id] =>
[1] =>
)
Array
(
[mail] => 29
[0] => 29
[message_id] =>
[1] =>
)
Array
(
[mail] => 30
[0] => 30
[message_id] => <[email protected]>
[1] => <[email protected]>
)
Array
(
[mail] => 31
[0] => 31
[message_id] => <[email protected]>
[1] => <[email protected]>
)
Array
(
[mail] => 34
[0] => 34
[message_id] =>
[1] =>
)
Array
(
[mail] => 35
[0] => 35
[message_id] =>
[1] =>
)
Я понятия не имею, почему некоторые массивы пусты. Обратите внимание, что результаты var_dump показывают, что есть строка из 48, но она по-прежнему пуста.
Цикл также показывает что-то в массиве, но никогда не печатается. Тем не менее, тот же самый запрос, который я использовал непосредственно в ssh, дает мне следующее. Все поля установлены.
Я не уверен, является ли это проблема, но мой message_id является VARCHAR (1000) - да, это очень большой, но я только начинаю, чтобы узнать о заголовки электронной почты и я прочитал гк около 1000 символы для идентификатора сообщения, хотя я сомневаюсь, что это когда-либо прошло.
Нужна помощь, пожалуйста. Я запасаюсь.
EDIT: Это происходит и во многих областях, я просто выбираю одно поле для ясности.
Какой смысл в PDO :: FETCH_ORI_NEXT? –
Можете ли вы показать инструкцию create для своей таблицы –
Замечу, что в каждом случае, когда данные не печатаются, первый символ является алфавитным, строки, где он печатается, следующий символ является числовым. – PaulF