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

时间:2017-04-01 01:29:25

标签: 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 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>"; 
?>

我尝试运行var_dump,结果就像这样

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" } }

错误显示 enter image description here 桌上住了 enter image description here 数据库表 enter image description here

2 个答案:

答案 0 :(得分:0)

首先不要使用mysql_ *因为不推荐使用。请改用mysqli或PDO。错误在这里:

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

as

["alternatif"]=> array(2)

并且您无法直接在表格列中插入数组。

答案 1 :(得分:0)

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

(1)使用serialize()

将数组转换为字符串表示形式

在您的示例中,这将是:

mysql_query("insert INTO ranking (idr,alternatif,nilai,ranking) ". 
"VALUE(DEFAULT,'". serialize($_GET['alternatif']) ."','". serialize($_GET['nilaialternatif']) ."','". serialize($_GET['rankingalternatif']) ."')") 

当然,从表中选择这些值时,必须使用deserialize()将它们转换回原始数组结构。

请注意,serialize()deserialize()是PHP特定的功能,而使数据库值依赖于特定的实现语言是不好的做法。为避免这种情况,您可能更愿意使用json_encode()json_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] ."')") 
}

除此之外,我建议您在http://php.net/manual/de/mysqlinfo.api.choosing.php查看mysql_ *函数的替代方法,因为这些函数已弃用,将在PHP 7中删除。