使用PHP pdo在MySQL中插入和检索数组数据

时间:2017-02-15 20:11:45

标签: php mysql pdo

请温柔地对待我,我对PHP和MySQL都很陌生 我正在尝试使用PDO插入和检索MySQL的数据。 这是HTML表单,它使用POST

将数据发送到我的PHP
<FORM ACTION="index.php" METHOD=POST>

Update# : 
<INPUT TYPE=TEXT NAME="update_num" align="left" LENGTH=2 required >  
<P>

<P>
ETO     :
<INPUT TYPE=TEXT NAME="eto" LENGTH=30 >  
</P>    

<P>
CAD#    :
<INPUT TYPE=TEXT NAME="cad" LENGTH=30 >  
</P>    

<p>
CMS:
</p>
<h6>Hold Down control(CTRL) key to select multiple CMSs</h6>
<SELECT NAME = "cms[]" multiple>
<option></option>>
<option>#1</option>>
<option>#2</option>>
<option>#3</option>>
<option>#4</option>>
</SELECT>
</p>
<INPUT TYPE=SUBMIT VALUE="Submit Form" align="center">

</FORM>
</INPUT>

我根据Stackoverflow的这篇文章做了修改: Getting All $_POST From Multiple Select Value

我的PHP代码如下所示:

$sql = "INSERT INTO dutypage (update_num, eto, cad, cms) VALUES (:update_num, :eto, :cad, :cms)";
$stmt = $conn->prepare($sql);

$stmt->bindParam(':update_num', $_POST['update_num']);
$stmt->bindParam(':eto', $_POST['eto']);
$stmt->bindParam(':cad', $_POST['cad']);
$stmt->bindParam(':cms', $_POST['cms']);

$stmt->execute(); 

我的数据已成功插入,但cms列现在只显示数组

MYSQL screenshot

我使用以下代码检索数据

$query="SELECT cms FROM dutypage ORDER BY dateOf DESC";
$data=$conn->query($query);
$result = $data->fetchAll(PDO::FETCH_ASSOC);
var_dump($result);
foreach ($result as $output) {
    echo $output['cms'];
    echo "<br>";
}

我只能得到这个:

array(1) { [0]=> array(1) { ["cms"]=> string(5) "Array" } } Array

我在表单中选择的选项是否实际传递到MySQL中的数组?

2 个答案:

答案 0 :(得分:1)

PHP试图将$ _POST [“cms”]数组转换为字符串,这基本上是不可能的。所以PHP输出字符串“Array” 如果你想将数组保存到dbs中,我建议你做什么,JSON使用json_encode函数对它们进行编码。
所以:cms的bindParam应该是这样的:
$stmt->bindParam(':cms', json_encode($_POST['cms']));
要在获取时恢复数组,只需在字符串上使用json_decode函数。

度过美好的一天。

答案 1 :(得分:1)

由于您已将cms设置为多个选择表单

<SELECT NAME = "cms[]" multiple>
<option></option>
<option>#1</option>
<option>#2</option>
<option>#3</option>
<option>#4</option>
</SELECT>

$_POST['cms']的值将是包含所选值的数组。

你可以这样做:

1)根据您正在运行的mysql,您可以设置&#34; cms&#34;列到JSON类型并以JSON格式存储值

2)您可以将值存储为文本,并在读取值后进行操作。 (不推荐)。

$stmt->bindParam(':cms', json_encode($_POST['cms']));

3)您可以创建一个新的一对多表,其中包含update_num和cms。对于每个选定的值,在该表中创建一个新插入