1

これに対する答えで別の質問を見つけようとしましたが、運がありませんでした。私の質問は基本的に...これでうまくいきますか?

$insert_tweets = "INSERT INTO tweets (
  'id',
  'created_at',
  'from_user_id',
  'profile_image',
  'from_user',
  'from_user_name',
  'text' 
  ) VALUES (
  {$user_data[$i]["id"]},
  {$user_data[$i]["created_at"]},
  {$user_data[$i]["from_user_id"]},
  {$user_data[$i]["profile_image"]},
  {$user_data[$i]["from_user"]},
  {$user_data[$i]["from_user_name"]},
  {$user_data[$i]["text"]}
)"

        for($i=0;$i<count($user_data);$i++){
            mysqli_query($mysqli,$insert_tweets);
        }

$user_data は多次元配列で、最初のレベルは数値で、次のレベルは連想です。

また、挿入前に連想配列変数を「データベースを準備」/サニタイズする最良の方法は何でしょうか? 悪意のあるデータは想定していませんが、いつでも可能です。

4

3 に答える 3

3
        for($i=0;$i<count($user_data);$i++){
            $insert_tweets = "INSERT INTO tweets ('id','created_at','from_user_id','profile_image','from_user','from_user_name','text') VALUES ({$user_data[$i]["id"]},{$user_data[$i]["created_at"]},{$user_data[$i]["from_user_id"]},{$user_data[$i]["profile_image"]},{$user_data[$i]["from_user"]},{$user_data[$i]["from_user_name"]},{$user_data[$i]["text"]})";
            mysqli_query($mysqli,$insert_tweets);
        }

これはうまくいくはずです

于 2012-07-27T02:47:14.303 に答える
3

はい、動作しますが、これを行う最善の方法は PDO を使用することです。

準備ステートメントで名前のないパラメーターを作成し、配列を渡して値をそれらのパラメーターにバインドできます。

$data = array('val1', 'val2');
$query = $db->prepare("INSERT INTO table (col1, col2) VALUES (? , ?)");
$query->execute($data);

PDO は入力値をエスケープします。

これは、開始するための PDO のチュートリアルです http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/

于 2012-07-27T02:51:31.353 に答える
1

アレイのサニタイズに関する私の提案は次のとおりです。

私がしているのは、データをサニタイズするための基本的な関数を作成することです:

function array_sanitize(&$item){
    $item = mysql_real_escape_string($item);
}

次に、を使用しarray_walk()て、新しい関数で配列をサニタイズできます。( phpマニュアル参照)

次のように配列を渡してサニタイズします。

array_walk($user_data, 'array_sanitize');
于 2012-07-27T03:12:56.960 に答える