2016-06-27 2 views
1

Привет, я застрял в этой действительно странной ситуации.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, дает мне следующее. Все поля установлены.

enter image description here

Я не уверен, является ли это проблема, но мой message_id является VARCHAR (1000) - да, это очень большой, но я только начинаю, чтобы узнать о заголовки электронной почты и я прочитал гк около 1000 символы для идентификатора сообщения, хотя я сомневаюсь, что это когда-либо прошло.

Нужна помощь, пожалуйста. Я запасаюсь.

EDIT: Это происходит и во многих областях, я просто выбираю одно поле для ясности.

+0

Какой смысл в PDO :: FETCH_ORI_NEXT? –

+0

Можете ли вы показать инструкцию create для своей таблицы –

+0

Замечу, что в каждом случае, когда данные не печатаются, первый символ является алфавитным, строки, где он печатается, следующий символ является числовым. – PaulF

ответ

5

Вы вбрасываетесь в браузер, и эти идентификаторы сообщений имеют <>, что означает, что они отображаются как неизвестные/незаконные теги html. Сделайте вид страницы на странице, и вы увидите, что они там

Я предполагаю, что первые два, которые были показаны, были закодированы с помощью &lt;...&gt;, поэтому они отображаются как текст, а не отображаются как html.

+0

Я думаю, что тег не может начинаться с номера, поэтому он показывает его правильно. –

+0

@E_p: может быть, но в спецификации html5 нет ничего, что говорит, что они не могут. он просто говорит '[0-9a-zA-Z]': [имя тега] (https://www.w3.org/TR/html-markup/syntax.html#tag-name) –

+0

THANK U! Я так долго задерживался, что никогда не думал, что это будет из-за html! Думаю, мне нужно найти другой способ показать это. Спасибо! –

Смежные вопросы