所以我有这个代码
$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
行:[{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();
}
希望这有帮助