簡體   English   中英

如何使用PHP PDO在mysql中插入未知數量的列

[英]How to insert unknown amount of colums in mysql using PHP PDO

當前,我正在使用以下代碼:PHP PDO Insert data

try {

    // prepare sql and bind parameters
    $stmt = $conn->prepare("INSERT INTO TABLE (firstname) 
    VALUES (:firstname, :lastname, :email)");
    $stmt->bindParam(':firstname', $firstname);    
    // insert a row
    $firstname = "John";
    $stmt->execute();
    echo "New records created successfully";
    }

而且效果很好。

我的問題:我有5列,例如: tag1,tag2,tag3,tag4,tag5

這就是我從API(數組)獲取值並回顯它們的方法

for ($i=0;$i<count($response["tag"]);$i++    )
{
echo "  ".$response["tag"][$i]["name"]." ";
}

現在,如果該數組僅發送2個標記值(即: ["tag"][0]["name"] and ["tag"][1]["name"]

然后我只想在tag1 & tag2 columns插入值

但是看起來我不能在插入數據代碼中使用forloop。 我需要一些幫助。

如果沒有標准化的數據,則數據庫中可以有一個TEXT類型列,當您從API serialize array接收數據或encode to JSON並將其保存在數據庫中時。

如果這是您必須執行的操作(而不是標准化),則類似

$data = [];
$binds = [];
for ($i=0;$i<count($response["tag"]);$i++    )
{
    //echo "  ".$response["tag"][$i]["name"]." ";
    $columns[] = "tag".$i;
    $binds[] = ":tag".$i;
}

$sql = 'insert into tableName ('.implode(',',$columns).')'.
        ' values ('.implode(',',$binds).')';
echo $sql;
$stmt = $conn->prepare($sql);
for ($i=0;$i<count($response["tag"]);$i++    )  {
    $stmt->bindParam($binds[i], $response["tag"][i]["name"]);
}

第一個foreach生成一個sql語句,例如

insert into tableName (tag0,tag1) values (:tag0,:tag1)

(調整數據庫的表名等)。 第二個foreach綁定語句中每個占位符傳入的值。

我嘗試了這個並且工作了。 但不確定是否是個好主意。

try {

    // prepare sql and bind parameters
    $stmt = $conn->prepare("INSERT INTO TABLE (firstname,tag1,tag2,tag3,tag4,tag5) 
    VALUES (:firstname,:tag1,:tag2,:tag3,:tag4,:tag5)");
    $stmt->bindParam(':firstname', $firstname);
    $stmt->bindParam(':tag1', $tag1);
    $stmt->bindParam(':tag2', $tag2);
    $stmt->bindParam(':tag3', $tag3);
    $stmt->bindParam(':tag4', $tag4);
    $stmt->bindParam(':tag5', $tag5);

    // insert a row
    $firstname = "John";
if ( ($response["tag"][0]["name"]) != ""        )
$tag1= "".$response["tag"][0]["name"]."";
if ( ($response["tag"][1]["name"]) != ""        )
$tag2= "".$response["tag"][1]["name"]."";
if ( ($response["tag"][2]["name"]) != ""        )
$tag3= "".$response["tag"][2]["name"]."";
if ( ($response["tag"][3]["name"]) != ""        )
$tag4= "".$response["tag"][3]["name"]."";
if ( ($response["tag"][4]["name"]) != ""        )
$tag5= "".$response["tag"][4]["name"]."";
    $stmt->execute();
    echo "New records created successfully";
    }

暫無
暫無

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

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