我找到多个关于将return
用于一个周期的主题。但要说真的,一切都差不多。将数据循环插入数组,然后返回该数组。
我正在做的是循环,所以也许这是个问题,但我如何尝试我都无法让它工作。
public function getSolicData() {
foreach ($this->solicStringConvert() as $solic){
$success = false;
try{
$con = new PDO( DB_HOST, DB_USER, DB_PASS );
$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sql = "SELECT * FROM solic_code WHERE manufacturer = :manufacturer_code AND main_type = :main_type AND option_code = :option_code";
$stmt_solic = $con->prepare( $sql );
$stmt_solic->bindValue( "manufacturer_code", "06", PDO::PARAM_STR );
$stmt_solic->bindValue( "main_type", "50", PDO::PARAM_STR );
$stmt_solic->bindValue( "option_code", $solic, PDO::PARAM_STR );
$stmt_solic->execute();
$i= 0;
while ($row = $stmt_solic->fetch()){
//echo $row['description'];
//echo '<li class="list-group-item"><span class="glyphicon glyphicon-ok text-success"></span>TEXT</li>';
//echo '<li class="list-group-item"><span class="glyphicon glyphicon-ok text-success"></span> "'.$row['description'].'"</li>';
echo $row['description'];
echo "<br>";
$this->values[] = $row['description'];
return $this->values;
}
}catch(PDOExeption $e){
echo $e->getMessage();
echo $con->errorInfo();
}
}
}
代码对我来说看起来是逻辑,不幸的是它的输出是空白数组。代码的其他部分应该没问题,因为如果我使用 echo
而不是return
我会得到很好的循环输出。另外,如果我将" return
"替换为var_dump()
则所有数据都在那里。
有人可以帮助我吗?
返回getSolicData
函数的退出,因此您只执行循环的一次迭代。
只需将 return 语句放在末尾:
public function getSolicData() {
$tempArray = $this->solicStringConvert();
foreach ($tempArray as $key => $solic){
$success = false;
try{
$con = new PDO( DB_HOST, DB_USER, DB_PASS );
$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sql = "SELECT * FROM solic_code WHERE manufacturer = :manufacturer_code AND main_type = :main_type AND option_code = :option_code";
$stmt_solic = $con->prepare( $sql );
$stmt_solic->bindValue( "manufacturer_code", "06", PDO::PARAM_STR );
$stmt_solic->bindValue( "main_type", "50", PDO::PARAM_STR );
$stmt_solic->bindValue( "option_code", $tempArray[$key], PDO::PARAM_STR );
$stmt_solic->execute();
$i= 0;
while ($row = $stmt_solic->fetch()){
//echo $row['description'];
//echo '<li class="list-group-item"><span class="glyphicon glyphicon-ok text-success"></span>TEXT</li>';
//echo '<li class="list-group-item"><span class="glyphicon glyphicon-ok text-success"></span> "'.$row['description'].'"</li>';
echo $row['description'];
echo "<br>";
$this->values[] = $row['description'];
// NOT HERE
}
}catch(PDOExeption $e){
echo $e->getMessage();
echo $con->errorInfo();
}
}
return $this->values; //AT THE END
}
此外,bindValue
接受引用,因此您不能使用在 foreach 循环中创建的 temporay 变量(它每次迭代都会被覆盖,因此它的最终值将用于所有查询),而是传递实际的数组元素
我建议将return $this->values;
移到方法的末尾,因为当遇到return
语句时,它会返回$this->values
的当前值,之后不会执行该方法的任何内容。