我是OOP和PDO世界的新手,在一个函数中返回数据并希望在另一个函数中使用它时,只需要一点点。
下面是我从我的数据库中获取所有gecko数据的功能,目前我打印出数组,所以我知道它正在工作。
函数getGecko:
public function getGecko($geckoName){
$dbh = $this->dbh;
try {
if (!$geckoName) {
throw new Exception("No gecko name set!");
}
$stmt = $dbh->query("SELECT * FROM geckos WHERE gecko_name = '$geckoName'");
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$row_count = $stmt->rowCount();
$row = $stmt->fetch();
if($row_count > 0){
print_r($row);
return true;
} else {
echo 'No information found for '.$geckoName.'!';
return false;
}
}
catch (Exception $e) {
echo $e->getMessage();
}
}
输出为 - Array ( [gecko_id] => 1 [gecko_name] => Zilly [gecko_aquisition_date] => 0000-00-00 [gecko_type] => Normal [gecko_gender] => Male [gecko_traits] => [gecko_bio] => Hench bastard [gecko_health_check] => All good! [gecko_bred] => 0 [gecko_hatchling] => 0 [gecko_clutch] => [gecko_photo] => )
- 没问题。
但我想在名为getMorph的函数中使用该数据来使用[gecko_type] => Normal
。我尝试过这样的事情:
public function getMorph($geckoName){
$this->getGecko($geckoName);
echo $row['gecko_type'];
}
但它什么都没有回报。我在程序意义上习惯了php,我只是想改善自己和我的代码,并希望陷入OOP。如果这被认为是'noob'问题我会道歉,但正如我所说,我正在努力学习。
感谢您的时间:)
答案 0 :(得分:2)
第一个函数的问题是你返回一个布尔值。没有返回实际数据。此外,在getMorph()
函数中,您尝试使用$row
变量。这不起作用,因为$row
变量仅存在于函数getGecko()
的本地范围内。这实际上会导致PHP打印错误消息。如果你启用error reporting,你就会发现这一点。
要解决此问题,您可以将第一个功能修改为返回数组:
if($row_count > 0){
// print_r($row);
return $row;
} else {
echo 'No information found for '.$geckoName.'!';
return false;
}
然后,在第二个函数中,您可以像这样访问数组:
public function getMorph($geckoName){
// $morph now contains the entire array
// returned by the other function
$row = $this->getGecko($geckoName);
// output the array contents
echo '<pre>' . print_r($row, TRUE), '</pre>';
// return the specific gecko_type value
return $row['gecko_type'];
}
我建议您阅读variable scope。这将非常有用。此外,完全不相关的上述问题,您直接在SQL查询中插入用户输入。 不要这样做!使用参数化查询 - 这样,您就可以避免SQL injection attacks。
以下问题有关于此主题的更多详细信息:
答案 1 :(得分:2)
您的函数getGecko
仅返回一个布尔值,$row
只是该方法中的局部变量。因此,您可以更改返回值以返回实际数据,也可以在PHP类中创建私有变量。
要更改返回类型,您可以在getGecko
将此返回更改为以下内容:
if($row_count > 0){
// ...
return $row;
}
然后在getMorph
函数中执行以下操作:
public function getMorph($geckoName){
$row = $this->getGecko($geckoName);
echo $row['gecko_type'];
}