簡體   English   中英

使用PHP pdo在MySQL中插入和檢索數組數據

[英]Inserting and retrieving array data into and from MySQL using PHP pdo

請對我好一點,我對PHP和MySQL還是很陌生。
我正在嘗試使用PDO向MySQL插入數據以及從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的這篇文章進行了修改: 從多個選擇值中獲取所有$ _POST

我的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列現在僅顯示Array

MYSQL屏幕截圖

我使用以下代碼檢索數據

$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中的數組中?

PHP嘗試在這里將$ _POST [“ cms”]數組轉換為字符串,這基本上是不可能的。 因此,PHP輸出字符串“ Array”。
如果要將數組保存到dbs中,我建議您執行以下操作:使用json_encode函數對JSON進行編碼。
因此:cms的bindParam應該如下所示:
$stmt->bindParam(':cms', json_encode($_POST['cms']));
為了在取回數組時取回數組,只需在字符串上使用json_decode函數。

祝你有美好的一天。

由於您已將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。 對於每個選擇的值,在該表中進行新插入

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM