PHP从数组插入到sql

问题描述:

我有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[]'"); 

<?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

非常感谢。它非常有用,为我工作。 –

$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 –

您可以使用此

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个字母。 –

你真的应该升级到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); 

你的阵列请小心:

您可以在一个SQL INSERT的。 $ name和$ country的元素数量必须相同。

+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); 
?>