【发布时间】:2016-06-14 13:46:10
【问题描述】:
所以我有这个代码
$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','*');
}
而getRecords 和getRecord 是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); 行中的错误,这就是它搞乱数据库连接的原因,导致此错误?
谢谢
编辑
这里是getRecord 和getRecords
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 行,我仍然遇到同样的错误:$stmt = $conn->prepare("SELECT ".$field_string." FROM ".$table." ORDER BY ".$sorder." ASC");
有什么想法吗?
谢谢
【问题讨论】:
-
发布
record课程的代码。 -
您的 PDO 连接失败,或者您没有正确保存/访问 PDO 对象,并且正在执行
$this->null->prepare或其他任何操作。 -
你的 db 类有问题。
标签: php pdo prepared-statement