使用PHP插入和检索数组数据到MySQL pdo
问题描述:
请对我温柔,我对PHP和MySQL很陌生。
我试图插入和检索使用PDO的MySQL数据。 这里是HTML形式将数据发送到使用POST使用PHP插入和检索数组数据到MySQL pdo
<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>
我根据这个帖子从#1所作的修改我的PHP: 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列现在只显示阵列
我用下面的代码来检索数据
$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的?
答
由于已设置的CMS作为多个选择形式
<SELECT NAME = "cms[]" multiple>
<option></option>
<option>#1</option>
<option>#2</option>
<option>#3</option>
<option>#4</option>
</SELECT>
的$_POST['cms']
的值将是包含所选择的值的数组。
你可以这样做:
1)根据MySQL中,你正在运行,您可以设置的“CMS”列JSON类型和存储JSON格式的值
2)可以存储值作为文本,并在读取值后进行操作。 (不建议)。
$stmt->bindParam(':cms', json_encode($_POST['cms']));
3)您可以为许多表创建一个新表,其中将包含update_num和cms。对于每个选定的值,请在该表格中插入一个新的插入文件
答
PHP在这里尝试将$ _POST [“cms”]数组转换为字符串,这基本上是不可能的。所以PHP输出字符串“Array”。
如果你想将数组保存到dbs中,我建议你要做的是,JSON使用json_encode函数对它们进行编码。
所以bindParam的:CMS应该是这样的:$stmt->bindParam(':cms', json_encode($_POST['cms']));
而让你的阵列回来取时,只需使用json_decode函数的字符串。
祝您有美好的一天。
请尽量避免为实际文本内容放置大的,臃肿的屏幕截图。我们无法以这种格式剪切和粘贴代码,这在尝试重现问题时通常很有帮助。 – tadman