无法执行预处理语句“致命错误:在null上调用成员函数prepare()”错误

时间:2016-06-14 13:46:10

标签: php pdo prepared-statement

所以我有这个代码

$lang=new language();
$default_language=$lang->getLanguage(0);

$currencies = new currency();
$currencies = $currencies->getCurrencies();

getCurrencies()getLanguage()在另一个包含类的文件中。

public function getCurrencies() {
    $curr=new record();
    return $curr -> getRecords('currencyTable','currency_order',array("currency_id","currency_name"));
  }

public function getLanguage($record) {
    $lang=new record();
    return $lang->getRecord('languageTable',$record,'lang_order','*');
  }

getRecordsgetRecord是公共函数record

我一直在收到错误

Fatal error: Call to a member function prepare() on null

参考getRecords函数的查询。

我不知道如何解决这个问题。这与数据库的连接有关吗?

另外,奇怪的部分是,如果我删除

$lang=new language();
$default_language=$lang->getLanguage(0);

部分,此错误消失了。有帮助吗?是$default_language=$lang->getLanguage(0);行中的错误,这就是为什么它会弄乱数据库连接,导致出现此错误?

由于

修改

以下是getRecordgetRecords

public function getRecords($table,$sorder,$field_names) {        
    $conn = db::open();

      //- build string of field names
      if($field_names!='*'){
      $field_string="";
      foreach ($field_names as $value) {
        $field_string.=",".$value;    
      }
      $field_string = substr($field_string,1);
    }else{
      $field_string='*';
    }
    //end up with field1, field2... or *
    //soreder is a field, contains int like 1 2 3

    //- run statement
    $stmt = $conn->prepare("SELECT ".$field_string." FROM ".$table." ORDER BY ".$sorder." ASC");
    $stmt->execute();
    $results = $stmt->fetchAll(PDO::FETCH_ASSOC);   
    return $results;
  }

public function getRecord($table,$record,$sorder,$field_names) {
    $conn = db::open();


      if($field_names!='*'){
      $field_string="";
      foreach ($field_names as $value) {
        $field_string.=",".$value;    
      }
      $field_string = substr($field_string,1);
    }else{
      $field_string='*';
       }
       //same things for $field_string and $sorder

    $stmt = $conn->prepare("SELECT ".$field_string." FROM ".$table." ORDER BY ".$sorder." LIMIT ? OFFSET ?");
    $stmt->bindValue(1, 1 , PDO::PARAM_INT);
    $stmt->bindValue(2, $record, PDO::PARAM_INT);
    $stmt->execute();
    $results = $stmt->fetch(PDO::FETCH_ASSOC);

    return $results;
  }

我修正了错误。在getRecord我有LIMIT 1,我按上述方法修复了它。关于getRecords行:[{1}}

,我仍然遇到同样的错误

有什么想法?

由于

1 个答案:

答案 0 :(得分:0)

您的数据库连接失败。错误不在您发布的代码中。代码中的错误是在准备语句时。 例如:$statement = $dbh->prepare("SELECT * FROM some_table")。我建议抛出异常,看看你的连接出了什么问题。您可以通过向pdo初始化添加选项来完成此操作。 array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)

  try{
    $dbh = new PDO('mysql:host='.MYSQL_HOST.';dbname='.MYSQL_DB,
                    MYSQL_USERNAME,
                    MYSQL_PASSWORD,
                    array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
  }catch(Exception $e){
    echo $e->getMessage();
  }

希望这有帮助