2016-09-27 5 views
-1

私はPHPが初めてで、JSONファイルの2番目の値を読み取れません。私の現在のJSONファイルを次のようにPHP JSONは配列の2番目の項目のnull値を読み込み続けます

[ 
    { 
    "name": "Jennifer", 
    "PvPwins": 20 
    }, 
    { 
    "name": "Johnny", 
    "PvPwins": 10 
    } 
] 

$json = file_get_contents("JSON_Data.json"); 
$data = json_decode($json, true); 
$query = "INSERT INTO Test(name, PvPwins) VALUES (?, ?)"; 
$st = mysqli_prepare($con, $query); 

foreach ($data as $row) { 
    $name = $row['name']; 
    $PvPwins = $row['PvPwins']; 

    mysqli_stmt_bind_param($st, "si", $name, $PvPWins); // edited to move this down 
    echo $name. " " .$PvPWins. "<br/>"; 
    mysqli_stmt_execute($st); 
} printf("Error : %s.\n", mysqli_stmt_error($st)); 

私は次の出力を取得し、次のように私のコードは次のとおりです。

Jennifer 
Johnny 
James 
Error: Column 'PvPwins' cannot be null. 

//編集 - それは名前だけの罰金を出力しますが、が、 PvPwinsを読むことを拒否し、それは小さいWの勝利です。私はまだ葉巻を掲示する前にチェックしました。

助けてくれてありがとう!

+0

ケースの問題。 '$ PvPwins'(小文字の 'w')変数を定義しますが、' $ PvPWins'(大文字の 'w')を使用しようとしています。 – jszobody

+0

foreachの前に変数$ name $ PvPwinsがないので、bind_paramはforeach内にある必要があります。 – JYoThI

+0

固定。助けてくれてありがとう。私は実際にデータベーステーブルのPvPwinsの代わりに私のstmt_bind_paramのPvPWins – Sebastian

答えて

-1

これを試してみるとよいでしょう echo $ name。 "$ PvPwins。" "
";

PVPwinsの首都W ... ??? ]

それは簡単ですか?

+0

いいえ、投稿する前にすべてのフィールドをチェックしました – Sebastian

+0

ええ、その固定されています。私はデータベースの属性名を間違えました。 – Sebastian

+0

変数名のエラー(投稿されてから4分以内)を最初に見つけて、誰かが私にそれをマークしても..! – Mikeys4u

1

間違った場所でmysqli_stmt_bind_paramを呼び出しています。そのとき、$ nameと$ pvWinsという2つの変数は、defiendされていません。次のように修正すべき

$json = file_get_contents("JSON_Data.json"); 
$data = json_decode($json, true); 
$query = "INSERT INTO Test(name, PvPwins) VALUES (?, ?)"; 
$st = mysqli_prepare($con, $query); 
// moved from here 

foreach ($data as $row) { 
    $name = $row['name']; 
    $PvPwins = $row['PvPwins']; 
    mysqli_stmt_bind_param($st, "si", $name, PvPwins); 
    echo $name. " " .$PvPwins. "<br/>"; 
    mysqli_stmt_execute($st); 
} 
+1

あなたはまだ '$ PvPwins'と' $ PvPWins'の間で大文字小文字の問題があります。 – jszobody

+0

@jszobodyはよく斑点がついていて、すべてのインスタンスに貼り付けられてコピーされています。 – e4c5

+0

はコードを移動させようとしましたが、同じエラーが発生しました。このエディタでコードを貼り付けることはできません。 名前がうまく表示されるので問題はないと思いますが、PvPwinsのNULL値を取得するだけです。 – Sebastian

0
JSONデータをPHPにデコードされると....それは自動的にPHPオブジェクトアクセサを使用してアクセスすることができ、ネイティブPHP-オブジェクトに変換します

:ブールtrueとき以外は->パラメータとしてjson_decode()ファンクションに渡されます。まずそれに注意してください。このことを考えてみましょう:

<?php 

    $json = file_get_contents("JSON_Data.json"); 
    $data = json_decode($json); 
    $query = "INSERT INTO Test(name, PvPwins) VALUES (?, ?)"; 
    $st  = mysqli_prepare($con, $query); 
    mysqli_stmt_bind_param($st, "si", $name, $PvPWins); 

    foreach ($data as $row) { 
     $name  = $row->name;  //<== USING -> (NOT [...]) 
     $PvPwins = $row->PvPwins;  //<== USING -> (NOT [...]) 

     echo $name. " " .$PvPWins. "<br/>"; 
     mysqli_stmt_execute($st); 
    } 
    printf("Error : %s.\n", mysqli_stmt_error($st)); 

注:->第二の場合:このコードは、ソリューションを提供しますが、むしろnameまたはPvPWinsへのアクセスが良くPHPオブジェクトアクセサを使用して行うことができるという事実にあなたを指すように想定していないパラメータはjson_decode()に省略されます。

+0

Umm、 OPは 'json_decode'で2番目の引数' true'を使用しています。これはオブジェクト_ではなく連想配列を返します。これもやっています。つまり、オブジェクトアクセサーが機能しません。このコードを試してみると、エラーが発生します。 – jszobody

+0

@jszobodyあまりにもありがとうございました....ちょうどこれに気付かなかった..... – Poiz

関連する問題