Php 在尝试将数据保存到数据库时如何解决数组到字符串的转换

Php 在尝试将数据保存到数据库时如何解决数组到字符串的转换,php,html,mysql,database,Php,Html,Mysql,Database,我创建了这样的代码 $peringkat=0; $ranking = array("$ATTT[0]" => "$HA[0]", "$ATTT[1]" => "$HA[1]"); arsort($ranking); foreach ($ranking as $alternatif => $nilaialternatif) { $peringkat++; echo " <th clas

我创建了这样的代码

$peringkat=0;
$ranking = array("$ATTT[0]" => "$HA[0]", "$ATTT[1]" => "$HA[1]");
arsort($ranking);
foreach ($ranking as $alternatif => $nilaialternatif) {
$peringkat++;
echo "
<th class='akhir'><input class='rankingakhir' type='text' name='alternatif[]' value='$alternatif' size='12' readonly></th>
<td class='akhir'><input class='nilaiakhir' type='text' name='nilaialternatif[]' value=".number_format($nilaialternatif, 3, '.', ',')." size='12' readonly></td>
<td class='akhir'><input class='rankakhir' type='text' name='rankingalternatif[]' value='$peringkat' size='12' readonly></td></tr>";

}
echo '<div class="akhir"><input class="akhir" type="submit" value="Simpan Ranking ke Database"></div></table></div></div>
<?php  //Sript PHP
$Host = "localhost";  
$User = "root";             //Memilih user/pengguna
$Password = "";             //Password, Biasanya Kosong
$db       = "spkjazuly";         //Memilih Database
$konek=mysql_connect($Host,$User,$Password)or die (mysql_error()); 
mysql_select_db ($db,$konek) or die (mysql_error("TIdak Terhubung Ke Server Mysql")); //Menghubungkan ke Mysql dan memilih Database
mysql_query("insert INTO ranking (idr,alternatif,nilai,ranking) VALUE(DEFAULT,'$_GET[alternatif]','$_GET[nilaialternatif]','$_GET[rankingalternatif]')") //Perintah Mysql untuk mengisi tabel Tamu
or die(mysql_error("Tidak Berhasil Menyimpan !"));  //Or Die (mysql_error()) Pesan Error
echo "<h1>Berhasil Menyimpan Data</h1>"; 
?>
array(3) { ["alternatif"]=> array(2) { [0]=> string(12) "Alternatif 1" [1]=> string(12) "Alternatif 2" } ["nilaialternatif"]=> array(2) { [0]=> string(5) "0.628" [1]=> string(5) "0.372" } ["rankingalternatif"]=> array(2) { [0]=> string(1) "1" [1]=> string(1) "2" } }
错误显示 表1-1 数据库表

首先不要使用mysql,因为mysql已经被弃用。改用mysqli或PDO。错误在这里:

VALUE(DEFAULT,'$_GET[alternatif]','$_GET[nilaialternatif]','$_GET[rankingalternatif]')")
作为


而且您不能直接在表列中插入数组。

首先不要使用mysql,因为它们已被弃用。改用mysqli或PDO。错误在这里:

VALUE(DEFAULT,'$_GET[alternatif]','$_GET[nilaialternatif]','$_GET[rankingalternatif]')")
作为


您不能直接在表列中插入数组。

有两种方法可以回答您的问题:

(1) 使用
serialize()

在您的示例中,这类似于:

mysql_query("insert INTO ranking (idr,alternatif,nilai,ranking) ". 
"VALUE(DEFAULT,'". serialize($_GET['alternatif']) ."','". serialize($_GET['nilaialternatif']) ."','". serialize($_GET['rankingalternatif']) ."')") 
当然,从表中选择这些值时,必须使用
反序列化()
将它们转换回原始数组结构

请注意,
serialize()
deserialize()
是特定于PHP的函数,而让数据库值依赖于特定的实现语言是不好的做法。为了避免这种情况,您可能更喜欢使用
json\u encode()
json\u decode()

<>强>但是,现在我已经解释了如何将数组转换成字符串,以便将它们存储在数据库中,请考虑我的第二个答案:

(2) 不要这样做

您最好考虑一下您的数据库设计。我敢说,即使在不知道您计划做什么的情况下,将数组存储为单个数据库值也是糟糕数据库设计的强烈迹象。虽然这实际上并不能回答您的问题,但我建议将每个数组元素存储在单独的表行中。根据需要,您可能需要向表中添加额外的行id或组id列。然后迭代数组以存储数据。例如:

for ($i = 0; $i < count($_GET[alternatif]; $i++) {
  mysql_query("insert INTO ranking (idr,alternatif,nilai,ranking) ". 
  "VALUE(DEFAULT,'". $_GET['alternatif'][$i] ."','". $_GET['nilaialternatif'][$i] ."','". $_GET['rankingalternatif'][$i] ."')") 
}
for($i=0;$i

除此之外,我建议您看看的mysql_*函数的替代方案,因为这些函数已弃用,将在PHP 7中删除。

有两种方法可以回答您的问题:

(1) 使用
serialize()

在您的示例中,这类似于:

mysql_query("insert INTO ranking (idr,alternatif,nilai,ranking) ". 
"VALUE(DEFAULT,'". serialize($_GET['alternatif']) ."','". serialize($_GET['nilaialternatif']) ."','". serialize($_GET['rankingalternatif']) ."')") 
当然,从表中选择这些值时,必须使用
反序列化()
将它们转换回原始数组结构

请注意,
serialize()
deserialize()
是特定于PHP的函数,而让数据库值依赖于特定的实现语言是不好的做法。为了避免这种情况,您可能更喜欢使用
json\u encode()
json\u decode()

<>强>但是,现在我已经解释了如何将数组转换成字符串,以便将它们存储在数据库中,请考虑我的第二个答案:

(2) 不要这样做

您最好考虑一下您的数据库设计。即使不知道您计划做什么,我敢说,将数组存储为单个数据库值强烈表明数据库设计不好。虽然这实际上并不能回答您的问题,但我建议将每个数组元素存储在单独的表行中。具体取决于您的根据需要,您可能需要向表中添加额外的行id或组id列。然后迭代数组以存储数据。例如:

for ($i = 0; $i < count($_GET[alternatif]; $i++) {
  mysql_query("insert INTO ranking (idr,alternatif,nilai,ranking) ". 
  "VALUE(DEFAULT,'". $_GET['alternatif'][$i] ."','". $_GET['nilaialternatif'][$i] ."','". $_GET['rankingalternatif'][$i] ."')") 
}
for($i=0;$i

除此之外,我建议您查看上的mysql_*函数的替代方案,因为这些函数已弃用,将在PHP 7中删除。

首先不要使用mysql_*因为它们已弃用。请使用mysqli或PDO代替您的代码。请首先不要使用mysql_*因为它们已弃用。请使用mysqli或PDO代替您的代码代码为。请对其进行迭代或使用类似于[0]、[1]的索引对其进行迭代或使用类似于[0]、[1]的索引注意:使用未定义的常量alternatif-假定的'alternatif'在是的,它们应该在单引号中。注意:使用未定义的常量alternatif-假定的'alternatif'在是的,它们应该在单引号中。