0

私は2つの配列を持っています:

name - facebook,google,yahoo
url - facebook.com,google.com,yahoo.com

私のデータベースには、テーブル (tbl_websites) があります。
構造: id、site_name、site_url

これらの 2 つの配列のデータをそのテーブルの 1 つの行に挿入したいと考えています。

例: (行 1)

id : 1
site_name : facebook
site_url : facebook.com

(行 2)

id : 2
site_name : google
site_url : google.com

(行 3)

id : 3
site_name : yahoo
site_url : yahoo.com

それ、どうやったら出来るの?

どんな助けでも大歓迎です。

4

2 に答える 2

3

配列間に直接 1:1 の一致があると仮定すると、次のようにそれらの 1 つを単純にループできます。

foreach ($name as $key => $value) {
  $name_value = mysql_real_escape_string($value);
  $url_value = mysql_real_escape_string($url[$key]);

  // Addendum: If there was a third array, just use `$key` as the array key
  // same as done with $url[$key]
  $thrid_value = mysql_real_escape_string($third_arr[$key]);

  $result = mysql_query("INSERT INTO tbl_websites (site_name, site_url, third_value) VALUES ('$name_value', '$url_value', '$third_value')");
}

idこれは、が自動インクリメント値であることを前提としています。簡単にするために、mysql_query()ここで関数を使用しました。ただし、代わりに PDO などの API を介してプリペアド ステートメントを使用することをお勧めします。配列からそれらを取得するプロセスは同じです。

PDO のバージョン (既に で接続が確立されているものとします$db):

foreach ($name as $key => $value) {   
  $stmt = $db->prepare("INSERT INTO tbl_websites (site_name, site_url) VALUES (:name, :url)");
  $stmt->execute(array(':name' => $name_value, ':url' => $url_value));
}

上記のコードにはエラー チェックが含まれていません。PDO ステートメントを使用したエラー チェックの例については、PDO マニュアルを参照してください。try/catchこれは、例外ブロックまたは PHP 警告を使用して行うことができます。

于 2012-04-10T02:42:23.667 に答える
1

1 つのクエリで実行できます (パフォーマンスが向上します)。

$values = array_map(function($name, $url){
    return "('$name', '$url')";
}, array_map('mysql_real_escape_string', $name), array_map('mysql_real_escape_string', $url));

mysql_query("INSERT INTO `tbl_websites` (`site_name`, `site_url`) VALUES " . implode(' ', $values));
于 2012-04-10T02:49:08.467 に答える