簡體   English   中英

PHP MySQL查詢和foreach在函數內部不起作用; 但外部函數相同的代碼有效

[英]Php mysql query and foreach does not work inside function; but outside function the same code works

這里的PHP功能

(閱讀評論等后更新)

是的, $db在函數之上和之外定義

$db = new PDO("mysql:host={$dbhost};dbname={$dbname};charset=utf8", $dbuser, $dbpass//, array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

function vatRates () {
   $something = "test";
   echo $something;

try {
   $query_select_date = "SELECT CurrencyRate FROM 2013Currencies WHERE DateOfCurrencyRate = '2001-03-23'";

   $sql_select_date = $db->prepare($query_select_date);
   $sql_select_date->execute();
   $data_select_date = $sql_select_date->fetchAll(PDO::FETCH_ASSOC);
   }
 catch (PDOException $e){
 echo "<br>DataBase Error: " .$e->getMessage();
 }
 catch (Exception $e) {
 echo "General Error: ".$e->getMessage() .'<br>';
 }

   foreach ($data_select_date as $data) {
       echo($data[CurrencyRate]);
   }


}

然后使用vatRates();調用該函數vatRates();

在輸出中只有一個詞:從$something測試。 vatRates();之后的php代碼vatRates(); 不執行。

但是,如果刪除function vatRates () { and function vatRates () { }則mysql query和foreach可以工作。

為什么mysql query and foreach在函數內部不起作用(需要更正什么)?

function vatRates () {
   global $db;
   $something = "test";
   echo $something;

   $query_select_date = "SELECT CurrencyRate FROM 2013Currencies WHERE DateOfCurrencyRate = '2001-03-23'";

   $sql_select_date = $db->prepare($query_select_date);
   $sql_select_date->execute();
   $data_select_date = $sql_select_date->fetchAll(PDO::FETCH_ASSOC);

   foreach ($data_select_date as $data) {
       echo($data[CurrencyRate]);
   }

}
function vatRates ($db) {
   $something = "test";
   echo $something;

   $query_select_date = "SELECT CurrencyRate FROM 2013Currencies WHERE DateOfCurrencyRate = '2001-03-23'";

   $sql_select_date = $db->prepare($query_select_date);
   $sql_select_date->execute();
   $data_select_date = $sql_select_date->fetchAll(PDO::FETCH_ASSOC);

   foreach ($data_select_date as $data) {
       echo($data[CurrencyRate]);
   }

}

用vatRates($ db)調用

原因:$ db當前不在函數的可見范圍內,這會將其傳遞給函數。

函數必須返回值,字符串,數組,布爾值等。

更好的是(通過arg $ db):

function vatRates ($db) {
$CurrencyRate = "";

$query_select_date = "SELECT CurrencyRate FROM 2013Currencies WHERE DateOfCurrencyRate = '2001-03-23'";

$sql_select_date = $db->prepare($query_select_date);
$sql_select_date->execute();
$data_select_date = $sql_select_date->fetchAll(PDO::FETCH_ASSOC);

foreach ($data_select_date as $data) {

$CurrencyRate .= $data[CurrencyRate];
}
return $CurrencyRate;
}

要使用它:

echo vatRates($db);
function vatRates () {
   $something = "test";
   echo $something;
   global $db;

   /* Your sql code and foreach goes here*/

}

要么

function vatRates ($db) {
       $something = "test";
       echo $something;

       /* Your sql code and foreach goes here*/

 }

您可能無法正確訪問數組中的值,這可能是一個問題。 嘗試將foreach更改為此

foreach ($data_select_date as $data) { 
  echo($data['CurrencyRate']);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM