2015-06-14 11 views
2

Я сделал код с использованием PDO для чтения таблицы из базы данных. Я пытаюсь повторить свой результат, но я получаю пустую страницу без ошибок.PDO Чтение из базы данных

Мой код:

<?php 
include 'config.php'; 
id = "264540733647332"; 
try { 
    $conn = new PDO("mysql:host=$hostname;dbname=mydata", $username, $password); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    } 
catch(PDOException $e) 
    { 
    echo "Connection failed: " . $e->getMessage(); 
    } 

    $result = $conn->query("SELECT * FROM mytable WHERE id='".$id."';"); 

    if ($result->fetchColumn() != 0) 
    { 
     foreach ($result->fetchAll(PDO::FETCH_BOTH) as $row) { 

      $Data1 = $row['Data1']; 
      $Data2 = $row['Data2']; 

      echo $Data2; 
     } 
    } 
    ?> 

Но эхо пуст без каких-либо ошибок. Что я делаю неправильно?

Спасибо всем!

+0

Попробуйте это: - '$ результат = $ conn-> запрос ("SELECT * FROM mytable WHERE id = '". $ Id. "'"); ' –

+0

Здравствуйте, я внес изменения, но без результата и без ошибок. Тем не менее я не вижу эха. Спасибо за ваше предложение. –

+0

'$ result', вероятно, не работает. Повторите запрос и посмотрите, работает ли он при выполнении непосредственно. Также вы должны использовать подготовленные инструкции. Я предполагаю, что '$ id' поступает от клиента? – chris85

ответ

0

Несколько вещей, чтобы изменить:

  • не забудьте $
  • если ваш собирается поймать ошибку, поймать весь код PDO
  • Вы можете использовать rowCount() для подсчета строк
  • эхо что-то, если количество записей составляет 0

include 'config.php'; 
$id = "264540733647332"; 
try { 
    $conn = new PDO("mysql:host=$hostname;dbname=mydata", $username, $password); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $result = $conn->query("SELECT * FROM mytable WHERE id='".$id."';"); 

    if ($result->rowCount() != 0) 
    { 
     $row = $result->fetch(PDO::FETCH_BOTH); 
     echo $row['Data1']; 
     echo $row['Data2']; 
    }else{ 
     echo 'no row found'; 
    } 
}catch(PDOException $e){ 
    echo "error " . $e->getMessage(); 
} 

использовать также подготовленные заявления, например:

$result = $conn->prepare("SELECT * FROM mytable WHERE id=:id"); 
$result->execute(array(':id'=>$id)); 
+0

Этот недостающий $ здесь опечатка, а не в моем коде. Извини за это! Большое вам спасибо за ваше решение. Теперь код работает! –

0

Я предполагаю, что есть только одна запись с идентификатором «264540733647332».

Проблема заключается в том, что вызов $result->fetchColumn() вызывает считывание первой строки в результирующем наборе, а затем переход к следующему результату. Поскольку есть только один из результатов, последующий вызов $result->fetchAll() ничего не возвращает, поэтому данные не отображаются.

Чтобы исправить это заменить fetchColumn с rowCount:

<?php 
include 'config.php'; 
id = "264540733647332"; 
try { 
    $conn = new PDO("mysql:host=$hostname;dbname=mydata", $username, $password); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    } 
catch(PDOException $e) 
    { 
    echo "Connection failed: " . $e->getMessage(); 
    } 

    $result = $conn->query("SELECT * FROM mytable WHERE id='".$id."';"); 

    if ($result->fetchColumn() != 0) 
    { 
     foreach ($result->fetchAll(PDO::FETCH_BOTH) as $row) { 

      $Data1 = $row['Data1']; 
      $Data2 = $row['Data2']; 

      echo $Data2; 
     } 
    } 
    ?> 
+0

Большое вам спасибо за ваше решение. Я меняю fetchColumn на rowCount, и теперь код работает! –

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