2011-07-14 50 views
1

嗨我真的很陌生的PHP/MySQL。SQL中的數組值php

我正在一個表中使用39個字段的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表字段的名稱)

然而,這是因爲你極不安全會直接將發佈數據插入到數據庫中。

所以,你應該做事先逃生的價值觀,並確保他們都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? =「Insert into mytable(」;

for($ i = 1; $ i < 40; $ I ++){

if ($i == 39) { 

     $sql .= "field_$i"; 

    } else { 

     $sql .= "field_$i,"; 

    } 

}

$ SQL = 「值。(」;

爲($ i = 1; $ I < 40; $ I ++){ 如果($我== 39){ 如果(is_int($ POST [文本字段 $ I])){$ SQL = $ POST [文本字段 $ I]; } 否則{ $ SQL = 「'」 。$ POST [ textfield $ i]。 「'」; }

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

    } 

} ?>

它將爲數值工作。你可以在單引號中插入數值,但有時它會產生一些問題