PHP&PDO:可以连接到数据库;似乎无法质疑

PHP&PDO:可以连接到数据库;似乎无法质疑,php,pdo,Php,Pdo,看起来我可以使用PDO连接到我的数据库,但不能用它执行任何查询。例如: private function connect() { try { $link = new PDO("mysql:host=$this->sHost;dbname=$this->sName", $this->sUser, $this->sPass); } catch (PDOException $e) { d

看起来我可以使用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;
 }
这将返回以下内容:

对象布尔法尔斯 致命错误:在第32行的Database.php中对非对象调用成员函数fetch


所以基本上,$link作为一个PDO对象返回,我更改了用户名和密码以查看是否捕获到异常;它是,并且由于某种原因,PDOConnection::Query返回null。这是我第一次处理PDO-我做了什么有趣的事情吗?

很可能查询失败,您确定表mt3_用户的名称,并且选择了正确的数据库吗?该错误消息显示$result不是对象,这是由于查询中的错误造成的

此外:

应该是

$row = $result->fetch();

除非您想指定要获取的选项,但不将对象作为参数传递。

您能试试吗

 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函数


数组[0]=>00000[1]=>1046[2]=>未选择任何数据库数组

我想没关系。事实证明,在使用常规MySQL函数进行迁移时,我没有将$this->sName$this->sName设置为null。我有点惊讶它没有抛出异常。不过,只有一半

固定的


但是谢谢你们的回答:

为了得到查询中的错误:

$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

代码风格建议:不要将变量放在双引号字符串中,而是使用单引号字符串和字符串串联来嵌入变量。使代码更可读,速度更快。此外,如果你想让一个异常是致命的,你不必捕捉它们并手动终止。你怎么能发现文字字符串+串联更具可读性?字符串中的变量插值是使用带符号的变量的最好部分,无数的开/闭引号和点造成了糟糕的局面。
  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"]);
     } 
$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