0

私の目的

MySQL テーブルに多数の列を追加するには。私は2つの懸念があります:

1)これを行う方法

2) これは悪い考えですか? もしそうなら、それはなぜですか?

これをやりたい理由:

体系的に名前が付けられた一連のフィールドを持つフォームがあります (例: field_1 field_2 など)。そのデータをページに投稿して mysql テーブルに保存し、フィールドに対応する名前の列を入力したい (つまり、列の名前は field_1 field_2 など)

各フィールド名の列を手動で手動で作成するのではなく、タスクをループすることは明らかでした。

しかし、あちこちで調査したところ、このアプローチは人々からの恐怖を違法にしているようであり、実際の解決策は見つかりませんでした.

私の試み:

$mysqli = new mysqli("localhost","user","password","db");
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}    

$i = 1;
while ($i <= 14)
{
    $column = 'field_'.$i;
    $sql= '"ALTER TABLE supply ADD '.$column.' VARCHAR(45)"';
    $mysqli->query($sql);
    printf("Affected rows (ALTER): %d\n", $mysqli->affected_rows);
$i++;
}

これはエラーなしで実行されるように見えますが、影響を受ける行メッセージが表示されます (ループごとに、これらのうち 14 個):

影響を受ける行 (ALTER): -1

列は追加されていません。

私のエラー、または問題をデバッグするためのより良い方法を教えてもらえますか? さらに、これが賢明でない場合は、その理由と、代わりに何を検討すべきかを説明していただけますか? ありがとうございました。

4

1 に答える 1

3

これaffected_rowsは、ステートメントのみを使用するときに設定されるためです。

  • 入れる
  • アップデート
  • 交換
  • 消去

テーブル内のデータを使用して行を操作します。

ALTER結果を使用する場合はtruefalseデータを操作しないため、テーブルの構造を編集するだけです。

$result = $mysqli->query($sql) ;
if ($result){
  echo "Table is updated. New column {$column} added" ;
}

また、正しい SQL は次のようになります。

$sql = "ALTER TABLE supply ADD {$column} VARCHAR(45) ; " ;
于 2013-09-10T17:32:33.130 に答える