-1

プロジェクトのデータベースにデータを入力しようとしています。Xampp をインストールし、phpmyadmin を使用して GUI からデータベースにアクセスしています。データベースは、特定の問題に対する経済的な代替案を評価するために必要な経済的な要素で構成されているため、少し大きくなります。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 回の INSERT 操作で 50 回の反復を行うため、そうすべきです。問題が見つかりません。誰でも私を助けることができますか?

4

1 に答える 1

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());

また、現在持っている関数に名前を付けることは、将来の開発者があなたのコードで作業することをほとんど運命づけています。

Hanky 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 が主キーの場合、実行ごとにオーバーライドされた値が取得されます。あなたは本当にauto incキーを持っているべきです。

于 2013-01-01T14:14:16.757 に答える