MySQLにINSERTするために下記のように書きました。
$sql = "INSERT INTO ".$table."
(
word , meaning , phoniticsign
) VALUES (
'".$word."','".$meaning."','".$phoniticsign."'
)";
INSERTする項目が増減するので、配列に入れて、
配列の要素が増減したら、自動的にMySQLにINSERTする項目も増減するよう、
下記のように書きましたがうまくいきません。
$itemsS =array('word' , 'meaning' , 'phoniticsign');
$sql = "INSERT INTO ".$table."
(
foreach($itemsS as $xxxx)
{
$xxxx.',';
}
) VALUES (
'".$word."','".$meaning."','".$phoniticsign."'
foreach($itemsS as $xxxx)
{
'".$xxxx."',;
}
)";
「'".$word."','".$meaning."','".$phoniticsign."'」を上手に表現できないとか、
MySQLの構文がちゃんとわかってないとかいろいろあるとおもうので、私の例にこだわらず、「配列の要素が増減したら、自動的にMySQLにINSERTする項目も増減するよう」にするにはどうしたら良いか教えてください。
OSはVista、IE、Firefox、最新のXampp、PHP5、EclipsePDT2を使ってます。
基本的な質問で恐縮ですが、よろしくお願いします。
テーブルにインサートする「フィールド」と「値」を
別の配列にセットした場合、下記のようにすればよいです。
$itemsS =array('word', 'meaning', 'phoniticsign');//フィールド
$valuesS=array($word, $meaning, $phoniticsign);//値
$sql = "INSERT INTO ".$table." (".
implode(",", $itemsS).
") VALUES ('".
implode("','", $valuesS).
"')";
配列の1つめはテーブルのwordカラム、二つめはmeaning、三つめはphoniticsignにいれたいのなら下のようにします
$itemsS =array('word' , 'meaning' , 'phoniticsign');
$sql = "INSERT INTO " . $table . "(`word`,`meaning`,`phoniticsign`) VALUES ('" . join("','", array_pad($itemsS, 3, '')) . "')";
array_padは$itemsSの中身が1つや2つの場合に穴埋めする役目を果たしています
ご回答ありがとうございます。
array_padの使い方が参考になりました。
テーブルにインサートする「フィールド」と「値」を
別の配列にセットした場合、下記のようにすればよいです。
$itemsS =array('word', 'meaning', 'phoniticsign');//フィールド
$valuesS=array($word, $meaning, $phoniticsign);//値
$sql = "INSERT INTO ".$table." (".
implode(",", $itemsS).
") VALUES ('".
implode("','", $valuesS).
"')";
コメント、ご回答ありがとうございます。
うまくいきました。
要素間にカンマを打たなければならないので、foreach より for 文を使った方がスマートです。以下の通り。
$itemsS =array('word' , 'meaning' , 'phoniticsign'); $n = count($itemsS); $sql = "INSERT INTO {$table} ("; for ($i = 0; $i < $n; $i++) { if ($i == 0) $sql .= $itemS[$i]; else $sql .= ", {$itemS[$i]}"; } $sql .= ") VALUES (" for ($i = 0; $i < $n; $i++) { if ($i == 0) $sql .= "'{$$itemS[$i]}'"; else $sql .= ", '{$$itemS[$i]}'"; } $sql .= ");"
ご回答ありがとうございます。
大変参考になりました。
やっぱりforでもいんですね。
コメント、ご回答ありがとうございます。
うまくいきました。