2011-07-14 5 views
1

こんにちは、私は本当にphp/mysqlを初めて使っています。PHPのSQL配列の値

私は、39のフィールドをすべて1つのテーブルにまとめたphp/mysqlの学校プロジェクトに取り組んでいます。 特にSQLクエリを実行する際にコードを短くしたい。

$sql = "INSERT into mytable ('field_1',...'field_39') Values('{$_POST['textfield_1']}',...'{$_POST['textfield_39']}')"; 

私は、私のような何かをしたい、これを理解する方法がわからないが:

$sql = "Insert into mytable ("----all fields generated via loop/array----") Values("----all form elements genrated via loop/array---")"; 

は、事前にありがとうございます。

あなたが破使用することができ

答えて

1

$sql = " 
INSERT into mytable 
('" . implode("', '", array_keys($_POST) . "') 
VALUES 
('" . implode("', '", $_POST . "')"; 

(これは、POST配列のインデックスはまた、dbテーブルのフィールドの名前ですと仮定し)

をしかし、これはあなたのため、非常に安全ではありませんポストデータをデータベースに直接挿入します。

ですから、事前にIS値を脱出し、彼らはOK /有効なテーブルのフィールドであることを確認してください行う必要があります少なくとも:

// Apply mysql_real_escape_string to every POST value 
array_walk($_POST, "mysql_real_escape_string"); 

// Filter out all POST values with invalid indices 
$allowed_fields = array('field_1', 'field_2', /* ... */); 
$_POST = array_intersect_key($_POST, $allowed_fields); 
+0

申し訳ありませんが、私はimplode()の使い方がわかりません。私は基本的なphp/mysqlしか知りませんでした。 –

+0

PHPドキュメントをチェックすると、特定の関数の詳細を知ることができます:http://de3.php.net/implode Implodeは、すべての値の間に指定された値を持つ値の配列をまとめます。 'implode($ glue、$ pieces);' –

1
<?php 
    $sql = "Insert into mytable ("; 

    for ($i = 1; $i < 40; $i++) { 
     if ($i == 39) { 
      $sql .= "field_$i"; 
     } else { 
      $sql .= "field_$i,"; 
     } 
    } 

    $sql .= "Values("; 



    for ($i = 1; $i < 40; $i++) { 
     if ($i == 39) { 
      $sql .= "'" . $_POST[textfield_$i] . "'"; 
     } else { 
      $sql .= "'" . $_POST[textfield_$i] . "',"; 
     } 
    } 
?> 
+0

レコードの挿入についてのみ言及します。 –

2
<?php 
function mysql_insert($table, $inserts) { 
$values = array_map('mysql_real_escape_string', array_values($inserts)); 
$keys = array_keys($inserts); 

return mysql_query('INSERT INTO `'.$table.'` (`'.implode('`,`', $keys).'`) VALUES  (\''.implode('\',\'', $values).'\')'); 
} 
?> 

For example: 

<?php`enter code here` 

    mysql_insert('cars', array(
    'make' => 'Aston Martin', 
    'model' => 'DB9', 
    'year' => '2009', 
    )); 
    ?> 

    try this it i thhink it il work 
1

< PHP $ sqlを? = "mytableに挿入する("

($ i = 1; $ i < 40; $ i)が{

if ($i == 39) { 

     $sql .= "field_$i"; 

    } else { 

     $sql .= "field_$i,"; 

    } 

}

$ SQLの++ = "値(";

ため($ i = 1; $ I < 40; $ iは++){ IF($ I == 39){ IF(is_int($ POST [テキストフィールド $ I])){ $のSQL = $ POST [$テキストフィールド I];。。他 } { $のSQL = "'" 。$ POST [テキストフィールド $ i] "'"; }

} else { 
     if(is_int($_POST[textfield_$i])){ 
      $sql .= $_POST[textfield_$i] .","; 
     } 
     else{ 
      $sql .= "'" . $_POST[textfield_$i] . "',"; 
     } 

    } 

} ?>

それが数値のために動作します。数値を一重引用符で挿入することはできますが、何度か問題が発生します。