[英]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.