我是OOP和PDO领域的新手,在一个函数中返回数据并希望在另一个函数中使用数据时,只需要一点帮助。
下面是我从数据库中获取所有壁虎数据的函数,此刻我将其打印出数组,因此我知道它正在工作。
函数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中。如果这被认为是“菜鸟”问题,我确实表示歉意,但正如我所说,我正在尝试学习。
感谢您的时间 :)
第一个函数的问题是您要返回一个布尔值。没有实际的数据返回。另外,在getMorph()
函数中,您尝试使用$row
变量。由于$row
变量仅存在于函数的局部作用域内,因此无法使用getGecko()
。这实际上将导致PHP打印一条错误消息。如果您启用了错误报告功能,您将发现这一点。
要解决此问题,您可以修改第一个函数以返回数组:
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'];
}
我建议您阅读有关可变范围的内容。这将非常有用。另外,与上述问题完全无关,您将用户输入直接插入SQL查询中。不要那样做!改用参数化查询-这样,您就可以避免SQL注入攻击。
以下问题对此主题有更多详细信息:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句