2015-09-28 109 views
0

我有2個數組,我想用一個按鈕將它們添加到我的sql表中。 我不知道使用數組與SQL。我讀了很多頁面,但找不到一個簡單的方法。PHP從數組插入到sql

$name=array("Jack", "John", "Fiona"); 

$country=array("London", "Greece", "Japan"); 

$entry =' went to school'; 

SQL表:

**id** **|** **name** **|** **entry**   **|**  **country** 

**1** Jack **|** Jack went to school **|** London 

**2** John **|** John went to school **|** Greece 

**3** Fiona **|** Fiona went to school **|** Japan 

我想是這樣的,但沒有奏效。問候

$sql = mysql_query("INSERT INTO bilgi (name,entry,country) VALUES ('$name[]','$name[]&$entry','$country[]'"); 

回答

0
<?php 

$name=array("Jack", "John", "Fiona"); 

$country=array("London", "Greece", "Japan"); 

$entry =' went to school'; 

for($i=0 ; $i<count($name);$i++){ 

    $sql = mysql_query("INSERT INTO bilgi (name,entry,country) VALUES ('".$name[$i]."','".$name[$i].$entry."','".$country[$i]."'"); 
} 
+0

非常感謝。它非常有用,爲我工作。 –

1
$name=array("Jack", "John", "Fiona"); 

$country=array("London", "Greece", "Japan"); 

$entry =' went to school'; 

$SizeOfName=sizeof($name); 

for($i=0;$i<$SizeOfName;$i++) 
{ 
    $Name=$name[$i]; 
    $Country=$country[$i]; 
    $Entry=$Name$entry; 

    $sql = mysql_query("INSERT INTO bilgi (name,entry,country) VALUES ('$Name','$Entry','$Country')"; 
} 
+0

怎麼回事,如果$國家沒有值$名稱相同數量的發生? – Naruto

+0

'sizeof'? 'for'而不是'foreach'? – PeeHaa

+0

是的。我也認爲這一點。但是,OP的要求只是這樣,正如我在他給出的例子中看到的那樣:Mr @Naruto –

0

您可以使用此

for ($i = 0; $i < count($name); $i++) { 
    $entryVal = $name[$i].$entry; 
    $sql = mysql_query("INSERT INTO bilgi (name,entry,country) VALUES ('".$name[$i]."','".$entryVal."','".$country[$i]."'"); 
} 
+0

謝謝,我試過了,但它確實喜歡名字:J,name:A,name.J。只有第一封信。我認爲3個字母的3個字母。 –

1

你真的應該升級到PDOmysqli。 mysql API已經被棄用了一段時間,並將在下一版PHP(7)中被刪除。

爲了回答您的實際問題國際海事組織第一個步驟應該是使數據理智,即:

$data = [ 
    [ 
     'name' => 'Jack', 
     'country' => 'London', 
    ], 
    [ 
     'name' => 'John', 
     'country' => 'Greece', 
    ], 
    [ 
     'name' => 'Fiona', 
     'country' => 'Japan', 
    ], 
]; 

這使得它更容易處理和維護數據。

接下來你只需要遍歷一個數組:

$entry = ' went to school'; 

foreach ($data as $item) { 
    $sql = mysql_query("INSERT INTO bilgi (name,entry,country) VALUES ('$item[name]','$item[name]$entry','$item[country]'"); 
} 

然而,這仍然使用舊的API,並不能防止SQL漏洞。你應該做的(making a database connection proper後):

$entry = 'went to school'; 

$stmt = $pdo->prepare('INSERT INTO bilgi (name,entry,country) VALUES (:name, :entry, :country'); 

foreach ($data as $item) { 
    $stmt->execute([ 
     'name' => $item['name'], 
     'entry' => $entry, 
     'country' => $item['country'], 
    ]); 
} 

我也從輸入字段刪除name,因爲這是重複的數據庫中的一個糟糕的方式。如果名稱發生更改,則您在entry列中的名稱被卡住。

這使用了一個非棄用的API。防止SQL注入漏洞,並且更加理智和可維護。插入到數據庫之前

$name = array("Jack", "John", "Fiona"); 
$country = array("London", "Greece", "Japan"); 
$entry =' went to school'; 

$values; 
for ($i = 0; $i < count($name); $i++) { 
    $values[] = "('$name[$i]', '$name[$i]$entry', '$country[$i]')"; 
} 

$sql = 'INSERT INTO bilgi (name, entry, country) VALUES '; 
for ($i = 0; $i < count($values); $i++) { 
    $sql .= $values[$i]; 
    if($i < (count($values) - 1)) $sql .= ", "; 
} 

$result = mysql_query($sql); 

你的陣列請小心:

0

您可以在一個SQL INSERT的。 $ name和$ country的元素數量必須相同。

+0

非常感謝。我會注意到他們。 –

0

這是你的問題動態的解決方案:

<?php 
$name=array("Jack", "John", "Fiona","Mack","Raja","Bohemia"); 
$country=array("London", "Greece", "Japan"); 
$entry ='went to school'; 

$bigcount = max(count($name),count($country)); 

for($i=0;$i<$bigcount;$i++) 
{ 
    $finalValues .= "('$name[$i]','$country[$i]','$entry'),"; 
} 
$final = substr($finalValues,0,-1); 
$query = "INSERT INTO bilgi (name,entry,country) VALUES $final"; 
$sql = mysql_query($query); 
?>