2015-06-14 207 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

我假设只有一条记录的ID为“264540733647332”。

问题是$result->fetchColumn()调用读取结果集中的第一行,然后前进到下一个结果。由于只有一个结果,因此后面的$result->fetchAll()调用不会返回任何内容,因此不会显示数据。

为了解决这个问题更换fetchColumnrowCount

<?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

非常感谢您的解决方案。我使用rowCount更改fetchColumn,代码正在工作! –