0

Twitter API から取得したデータの json_decode である配列があります。
私が使用している配列のセクションは次のとおりです。

Array(
    [0]=>stdClass Object (
        [user] => stdClass Object (
            [screen_name] => User1
        )
        [text] => Text of message
        [id] => 220301332135952385
        [created_at] => Tue Jul 03 23:41:45 +0000 2012
    )

    [1]=>stdClass Object (
        [user] => stdClass Object (
            [screen_name] => User2
        )
        [text] => Text of message
        [id] => 220301332135952385
        [created_at] => Tue Jul 03 23:41:45 +0000 2012
    )
)

私が直面している問題は、私のPHPが値を取得しているだけで、そこから値User1を取得しText of messageていることです。私の実際の配列はもっと長いですが、上記のパターンに従います。
これが私のPHPです:

foreach($tweet as $num => $val) {
  $username = $tweet[$num]->user->screen_name;
  echo $num . "-USER-" . $username . "-NAME ";
  $tweet = $tweet[$num]->text;
  $id = $tweet[$num]->id_str;
  $year = substr($tweet[$num]->created_at, -4);

  $statement = $connect->prepare("INSERT INTO table (username, tweet, id, year) VALUES ('$username', '$tweet', '$id', '$year')");
  $statement->execute();
}

$tweet私の配列です。そこechoには、デバッグに使用していたものがあります。以下を出力します。

1-USER-User1-NAME 2-USER--NAME 3-USER--NAME

私は期待しています:

1-USER-User1-NAME 2-USER-User2-NAME

最後に、私のデータベースUser1はユーザー名の列とText of messageツイートの列だけを受け取ります。id または year には何も挿入されません。ただし、最初のツイートの後に各ツイートに対して空の行が作成されます。私が間違っているのかわかりません。どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

1

この問題をまだ解決していない場合は、次のことが起こっています。

foreachループの 3 行目で、値を置き換えています。これが、データベースで$tweet最初の User のみが表示される理由です。「id」と「年」が取得できない理由は、afterが文字列 になったためです。usernametweettweet$tweet[$num]->text

別の問題はあなたにあります$id = $tweet[$num]->id_str。上記の理由により、これはとにかく機能しませんが、上記の問題を修正すると、$idまだnullになります。

次のことを試してください。

foreach($tweet as $num => $val) {
  $username = $tweet[$num]->user->screen_name;
  echo $num . "-USER-" . $username . "-NAME ";
  $user_tweet = $tweet[$num]->text; // Use $user_tweet = ... instead of $tweet = ...
  $id = $tweet[$num]->id; // Replace $id_str with $id
  $year = substr($tweet[$num]->created_at, -4);

  $statement = $connect->prepare("INSERT INTO table (username, tweet, id, year) VALUES ('$username', '$user_tweet', '$id', '$year')");
  $statement->execute();
}

$tweet[$num]の代わりに使用することを選択した理由がわかりません$val

また、準備されたステートメントをコードで最大限に活用するには、準備されたパラメーター化されたクエリを次のように使用することをお勧めします (そして、「SQL インジェクション防止 - 防御オプション 1: パラメーター化されたクエリ」の理由は次のとおりです)。

$statement = $connect->prepare("INSERT INTO table (username, tweet, id, year) VALUES (:username, :user_tweet, :id, :year)");
$statement->bindParam(':username', $username);
$statement->bindParam(':user_tweet', $user_tweet);
$statement->bindParam(':id', $id);
$statement->bindParam(':year', $year);
$statement->execute();
于 2013-08-25T01:40:01.850 に答える