2016-08-10 12 views
-1

初心者PHPとMySQLがここにあります。私はここで他の記事を見てきましたが、私が後に書いたコードをまとめてみましたが、2つの配列の内容をMySQLテーブル内の2つの列に挿入するのに苦労しました。PHP配列がMySQLテーブルに挿入されます

|-------|-------|-------| 
| id | date | value | 
|-------|-------|-------| 

IDを主キーがAUTO_INCREMENTが設定されている - 以下のように

MySQLのテーブルは、3つの列に構成されています。 日付は日付のデータ型です。 値は10進(5,2)データ型です。

私は、次を含む2つのPHPの配列$dates$values持っている -

$mydates = serialize($dates); 
$myvalues = serialize($values); 

マイ挿入ステートメント - 私は前に私のINSERTクエリには、2つの新しい変数にシリアライズされたデータをしました

echo '<pre>'; print_r($dates); echo '</pre>'; 
Array 
(
    [0] => 2015 
    [1] => 2014 
    [2] => 2013 
    [3] => 2012 
    [4] => 2011 
    [5] => 2010 
    [6] => 2009 
    [7] => 2008 
    [8] => 2007 
    [9] => 2006 
    [10] => 2005 
    [11] => 2004 
    [12] => 2003 
    [13] => 2002 
    [14] => 2001 
    [15] => 2000 
    [16] => 1999 
    [17] => 1998 
    [18] => 1997 
    [19] => 1996 
    [20] => 1995 
    [21] => 1994 
    [22] => 1993 
    [23] => 1992 
    [24] => 1991 
    [25] => 1990 
    [26] => 1989 
    [27] => 1988 
    [28] => 1987 
) 

echo '<pre>'; print_r($values); echo '</pre>'; 
Array 
(
    [0] => 52.32 
    [1] => 98.97 
    [2] => 108.56 
    [3] => 111.63 
    [4] => 111.26 
    [5] => 79.61 
    [6] => 61.74 
    [7] => 96.94 
    [8] => 72.44 
    [9] => 65.16 
    [10] => 54.57 
    [11] => 38.26 
    [12] => 28.85 
    [13] => 24.99 
    [14] => 24.46 
    [15] => 28.66 
    [16] => 17.9 
    [17] => 12.76 
    [18] => 19.11 
    [19] => 20.64 
    [20] => 17.02 
    [21] => 15.86 
    [22] => 17.01 
    [23] => 19.32 
    [24] => 20.04 
    [25] => 23.76 
    [26] => 18.23 
    [27] => 14.91 
    [28] => 18.53 
) 

$query = "INSERT INTO eia(date,value) VALUES ('$mydates','$myvalues')"; 

いくつかのエラーハンド玲 -

if ($conn->query($query)) { 
    $msg = ...Sucessfully Entered! 
} else { 
    $msg = ...Error Entering! 
} 
if (isset($msg)){ 
    echo $msg; 
} 
if (!$conn->query("INSERT INTO eia(date,value) VALUES ('$mydates','$myvalues')")) { 
    printf("Errormessage: %s\n", $conn->error); 
} 

そして、最終的に接続を閉じる -

mysqli_close($conn); 

これは私が「が正常に入力した」というメッセージを受け取るが、MySQLのテーブルを検査する上で、私はちょうど、次の2つの行を取得実行すると -

id | date | value 
1 |{null}| 0.00 
2 |{null}| 0.00 

任意のアイデアを、私は、各列すなわち

に加え、これらの配列の内容を取得する方法
id | date | value 
1 | 2015 | 52.32 
2 | 2014 | 98.97 
... 

ありがとうございます。

if ($conn->query($query)) { 

if (!$conn->query("INSERT INTO eia_brent(eiaDate,eiaValue) VALUES ('$mydates','$myvalues')")) { 

あなたはnullを取得し、:

+0

_「データを2つの新しい変数にシリアル化しました」という意味は全くありません。また、新しいレコードでNULL/0.00を取得する理由もあります。これらの配列をシリアル化すると、日付または小数点のどちらの書式とも一致しない_strings_が作成されるためです。 – CBroe

+0

@CBroeはフィードバックに感謝します。ここで行ったエラーが表示され、エラーが発生しました。 – CRC

答えて

1

あなたが同じクエリを2回実行しているためですここ

​​
+0

良い試みですが、日付が1つの配列であり、値が別の配列 – e4c5

+0

@ e4c5でも、質問で与えられたものと同じインデックスを持っています。$ datesを反復し、その同じインデックスの$ value [$ key]。何かが間違っている場合に修正してください –

+0

私はあなたが何を意味するかを見ます。連想配列を扱うときに$キーがよく使用されるという事実(単なる慣例)によって捨てられました。だからあなたの答えは確かに正しいですが、それは赤いニシンだった変数の命名($値と$値も混乱)です。 – e4c5

2

をシリアル化する必要はありません0.00シリアル化された情報を単一のセルに挿入しようとしているためです。

複数のINSERTクエリは次のようになります。

INSERT INTO eia_brent(eiaDate, eiaValues) 
VALUES ('myDate1', 'myValue1'), ('myDate2', 'myValue2'), ('myDate3', 'myValue3'), [...] 

あなたはループあなたのアレイと、クエリを作成することができます。

$query = 'INSERT INTO eia_brent(eiaDate, eiaValues) VALUES'; 
$values = []; 

foreach ($dates as $i => $date) { 
    $values[] = "('{$date}', '{$values[$i]}')"; // validate your input to database first! 
} 

$query .= implode(', ', $values); 

$conn->query($query); 
+0

挿入時に$ values [$ i]を適切な日付formateに変換する必要があります。または0000-00-00という値を得るでしょう。 –

+0

DATE_FORMAT(STR_TO_DATE({$ values [$ i]}、 %Y ')、'%Y-%m-%d '))または列の型をintに変更する –

+0

@Justinas。ありがとうございました。上記のコードを試しましたが、テーブルに何も挿入しませんでしたか? dateカラムのデータ型をintに調整しました。 – CRC

0

Dateデータ型は、1000-の間で、YYYY-MM-DD形式で日付を受け入れます01-01および9999-12-31。たとえば、1973年12月30日は1973-12-30として保存されます。年だけを格納することが非常に特殊な場合は、

+0

ありがとうございます。これは理にかなっていますが、データ型を日付型の代わりにINTに調整しました。 – CRC

関連する問題