2013-01-01 110 views
-1

我想填充一個項目的數據庫。我已經安裝了Xampp,並且我正在使用phpmyadmin通過GUI訪問數據庫。數據庫有點大,包括評估給定問題的經濟選擇所需的經濟因素。 PHP代碼:通過PHP填充數據庫

function _fp($n,$i){ 
return number_format((pow((1+$i),$n)),5); 
} 

function _pf($n,$i){ 
return number_format((1/_fp($n,$i)),5); 
} 

function _pa($n,$i){ 
return number_format(((pow((1+$i),$n)-1)/($i*pow((1+$i),$n))),5); 
} 

function _ap($n,$i){ 
return number_format((1/_pa($n,$i)),5); 
} 

function _fa($n,$i){ 
return number_format(((pow((1+$i),$n)-1)/$i),5); 
} 

function _af($n,$i){ 
return number_format((1/_fa($n,$i)),5); 
} 

function _pg($n,$i){ 
return number_format(((pow((1+$i),$n)-$i*$n-1)/($i*$i*pow((1+$i),$n))),5); 
} 

function _ag($n,$i){ 
return number_format((1/$i-$n/(pow((1+$i),$n)-1)),5); 
} 

$connection=mysql_connect("localhost","root",''); 
if($connection){ 
$db=mysql_select_db("comp_interest_fact"); 
if(!$db) 
    echo "Failed to select 'comp_interest_fact'.\n"; 
} 
else 
echo "Failed to connect to database.\n"; 

$percentage=array('0_25'=>.0025, 
    '0_5'=>.005, 
'0_75'=>.0075, 
'1'=>.01, 
'1_25'=>.0125, 
'1_5'=>.015, 
'2'=>.02, 
'3'=>.03, 
'4'=>.04, 
'5'=>.05, 
'6'=>.06, 
'7'=>.07, 
'8'=>.08, 
'9'=>.09, 
'10'=>.1, 
'11'=>.11, 
'12'=>.12, 
'13'=>.13, 
'14'=>.14, 
'15'=>.15, 
'16'=>.16, 
'18'=>.18, 
'20'=>.20, 
'22'=>.22, 
'24'=>.24, 
'25'=>.25, 
'30'=>.3); 
reset($percentage); 
while(list($key,$value)=each($percentage)){ 
$table="percent_$key"; 
for($k=1;$k<=50;$k++){ 
    $fp=_fp($k,$value); 
    $pf=_pf($k,$value); 
    $af=_af($k,$value); 
    $fa=_fa($k,$value); 
    $ap=_ap($k,$value); 
    $pa=_pa($k,$value); 
    $pg=_pg($k,$value); 
    $ag=_ag($k,$value); 
    mysql_query("INSERT INTO $table   VALUES($k,".$fp.",".$pf.",".$af.",".$fa.",".$ap.",".$pa.",".$pg.",".$ag.")"); 
} 
} 
mysql_close($connection); 

與該腳本的問題是,一旦我運行它,在comp_interest_fact表沒有所有50行。實際上他們應該這樣做,因爲for循環需要50次迭代和50次INSERT操作。我找不到問題。誰能幫我?

+1

它給出了什麼錯誤?任何MySQL錯誤?你有錯誤報告嗎? –

+0

縮進可以在這裏改進很多,這會讓你更容易閱讀。外部'reset/while/each'構造會更有意義,就像'foreach'聲明 - 這就是它的用途!考慮包裝你的SQL語句,所以你不必在你的編輯器中水平滾動。最後嘗試避免使用'mysql'函數,因爲它們已被棄用。 – halfer

回答

0

更改您的插入條件:

mysql_query("INSERT INTO $table VALUES($k,".$fp.",".$pf.",".$af.",".$fa.",".$ap.",".$pa.",".$pg.",".$ag.")") or die(mysql_error()); 

或更好:

mysql_query("INSERT INTO $table VALUES ($k, $fp, $pf, $af, $fa, $ap, $pa, $pg, $ag)") or die(mysql_error()); 

而且命名你的職責,你現在有他們是相當多惜敗任何未來的開發者在你的代碼工作。

高亮手帕Pankys評論:

In Addition to this suggestion, please also note that this code will produce 1350 INSERT operations and not 50. It will run 50 * 27 Times as per your code

如果你的$ k是主鍵,然後你會得到在每次運行覆蓋值。你應該真的有一個汽車公司的關鍵。

+1

除了這個建議,還請注意,這段代碼將產生1350 INSERT操作,而不是50.它將運行50 * 27倍,根據您的代碼 –

+0

@Petrograd如果我設置由$ k表示的列(這是主鍵)自動增量比插入語句如何改變? –

+0

@ErvinDervishaj刪除$ k, – Petrogad