2010-11-29 212 views
0

看来我可以使用PDO连接到我的数据库,但无法执行任何查询。例如:PHP&PDO:可以连接到数据库;似乎无法查询

private function connect() { 
     try { 
      $link = new PDO("mysql:host=$this->sHost;dbname=$this->sName", $this->sUser, $this->sPass); 
     } 
      catch (PDOException $e) { 
      die ($e); 
     } 
     print_r($link); 
     $result = $link->query("select * from mt3_users"); 
     var_dump($result); 
     $row = $result->fetch($result); 
     die("Your id is: ".$row["id"]); 
     //$link = mysql_connect($this->sHost, $this->sUser, $this->sPass); 
     if (!$link) { 
      echo "Failed to connect to $this->sHost!"; 
      return false; 
     } 
     return $link; 
} 

这将返回以下:

PDO Object () bool(false) Fatal error: Call to a member function fetch() on a non-object in Database.php on line 32

所以基本上,$链接是回来为PDO对象(我改变了我的用户名和密码,以查看是否有异常被抓住了,这是)和PDOConnection :: Query出于某种原因返回null。这是我第一次处理PDO - 我是否在做一些有趣的事情?

+0

代码风格建议:不要把变量在双引号中的字符串,但使用单 - 引用字符串和字符串连接来嵌入变量。使代码更易读和更快。 此外,如果你想让一个异常致命,你不必手动捕获它们并死掉()。 – ThiefMaster 2010-11-29 23:01:03

回答

0

阵列([0] => 00000 [1] => 1046 [2] =>未选择数据库)Array()

没关系,我猜。事实证明,在使用常规MySQL函数进行迁移时,我并没有设置$ this-> sName($ this-> sName为null。我惊讶地发现它没有抛出异常,只有一半)

固定。

但是感谢你们的答案:)

0

最有可能的查询失败,你确定表mt3_users的名称,并且你选择了正确的数据库吗?该错误消息表明$result不是一个对象,这是由于查询中的错误。

另外:

$row = $result->fetch($result); 

应该

$row = $result->fetch(); 

,除非你想指定选项fetch(),但你不传递对象作为参数。

0

可以给这一个尝试

private function connect() { 
try { 
    $link = new PDO("mysql:host=$this->sHost;dbname=$this->sName", $this->sUser, $this->sPass); 
return $link ; 
} 
catch (PDOException $e) { 
die ($e); 
} 
} 
$pdolink = $this->connect(); 
$rows = $pdolink->query("select * from mt3_users"); 
foreach($rows as $row){ 
    echo("Your id is: ".$row["id"]); 
} 

和如果需要与fetchAll功能粘

private function connect() { 
    try { 
     $link = new PDO("mysql:host=$this->sHost;dbname=$this->sName", $this->sUser, $this->sPass); 
    return $link ; 
    } 
    catch (PDOException $e) { 
    die ($e); 
    } 
    } 
    $pdolink = $this->connect(); 
    $q = $pdolink->prepare("select * from mt3_users"); 
    $q->exectue(); 
    $rows = $q->fetchAll(); 
    var_dump($rows); 
    foreach($rows as $row){ 
     echo("Your id is: ".$row["id"]); 
    } 
0

为了得到错误在您的查询:

$result = $link->query(...); 
if($result===FALSE){ 
    print_r($link->errorInfo); 
    exit(); 
} 

// the correct way to fetch one row 
$link->fetch(PDO::FETCH_ASSOC); // or whatever way you want to fetch data