プロが教えるわが家の防犯対策術!

下記の配列のデータをMySQLのデータベースに登録をしたいと思っています。
(参考)に記述しています内容で実行をしましたが、1つ目のデータしか登録がされず、
for文なども考え試行錯誤していましたが、うまく実行できない状況であります。
登録のための方法をご教授いただければと思います。よろしくお願いします。

array(3) {
[0]=>"146-0082"
[1]=>"東京都大田区"
[2]=>"田中さん"

array(3) {
[0]=>"120-0015"
[1]=>"東京都足立区"
[2]=>"山田さん"

--------------------
(参考)
$sql = ('insert into table (number, adress, name) values (:number, :adress, :name)');
$stmt = $dbh->prepare($sql);
$params = array(
":number" => $data[0],
":adress" => $data[1],
":name" => $data[2]
);

A 回答 (3件)

>$array =


>array("146-0082", "東京都大田区", "田中さん"),
>array("120-0015", "東京都足立区", "山田さん"),
>);
となっております。

いや、syntax errorになるソースで提示されても困ります・・・

私が書いたとおり

$array = array(
array("146-0082", "東京都大田区", "田中さん"),
array("120-0015", "東京都足立区", "山田さん"),
);

という意味でいいということですよね。

この配列(insertする内容だけで構成)が生成できているなら疑問符プレースホルダを使って

$stmt = $dbh->prepare('insert into table (number, address, name) values (?, ?, ?)');
foreach ($array as $data) { $stmt->execute($data); }

とも書けますね。


なお、PDOのエラーモードは適切に設定されていますでしょうか?デフォルトはPDO::ERRMODE_SILENTなので何かエラーがあってもわかりません(エラーになる記述なのに「何故か動かない」と悩む方を見かけますので)。

http://www.php.net/manual/ja/pdo.error-handling. …
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
不十分な情報での質問となり申し訳ありませんでした。
ご指摘のとおりPDOのエラーモードの設定も行ってみたいと思います。

お礼日時:2014/11/16 19:34

こんな感じでどうでしょう?



<?PHP
$array = array(
array("146-0082", "東京都大田区", "田中さん"),
array("120-0015", "東京都足立区", "山田さん"),
array("000-000", "北海道札幌市", "佐藤さん"),
array("999-999", "沖縄県那覇市", "鈴木さん"),
);

$pdo = new PDO($dsn, $user,$password);

$sql="insert into tbl (`number`,`address`,`name`) values";
$str="(".implode(",",array_fill(1,3,"?")).")";
$sql.=implode(",",array_fill(1,count($array),$str));
//print $sql.";<br>\n";

$a=array();
array_walk_recursive($array, function($b) use (&$a){$a[] = $b;});
//print_r($a);

$stmt = $pdo->prepare( $sql);
$stmt->execute($a);
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
array_walk_recursiveは初めて知った関数で非常に参考となりました。
質問させていただいた内容は、まだ試行錯誤中ですが、もう試してみたいと思います。
ありがとうございます。

お礼日時:2014/11/08 18:34

>下記の配列のデータ



どういう構成になっているのか読み取れません。例示してください。

たとえば

$array = array(
array("146-0082", "東京都大田区", "田中さん"),
array("120-0015", "東京都足立区", "山田さん"),
);

のようになっているのであれば、

$sql = ('insert into table (number, address, name) values (:number, :address, :name)');
$stmt = $dbh->prepare($sql);
foreach ($array as $data) {
$stmt->execute(array(":number"=>$data[0], ":address"=>$data[1], ":name"=>$data[2]));
}

でいいと思いますが・・・

この回答への補足

配列の構成を正しくお伝えできておりませんでした。
$array =
array("146-0082", "東京都大田区", "田中さん"),
array("120-0015", "東京都足立区", "山田さん"),
);
となっております。
大変お手数でございますが、再度ご回答をいただきたく思います。
よろしくお願いいたします。

補足日時:2014/11/07 18:25
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!