繁体   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