Php 将数据从一个mysql表插入到另一个mysql表(注意:数组到字符串的转换)

Php 将数据从一个mysql表插入到另一个mysql表(注意:数组到字符串的转换),php,mysql,pdo,Php,Mysql,Pdo,我试图从数据库中的表tickets中获取数据htmlCode,然后尝试将其插入另一个表users 下面是我编写的流动代码,它给了我一个错误通知:数组到字符串的转换 我有一点关于我的愚蠢的想法,我试图将数组插入数据库,它应该是一个字符串,那么有没有更简单的方法将数据从一个表传输到另一个表,或者对我的流动代码进行任何更正 <?php try{ $conn = new PDO("mysql:host=localhost;dbname=mydb",

我试图从数据库中的表
tickets
中获取数据
htmlCode
,然后尝试将其插入另一个表
users

下面是我编写的流动代码,它给了我一个错误通知:数组到字符串的转换

我有一点关于我的愚蠢的想法,我试图将数组插入数据库,它应该是一个字符串,那么有没有更简单的方法将数据从一个表传输到另一个表,或者对我的流动代码进行任何更正

<?php
        try{
                $conn = new PDO("mysql:host=localhost;dbname=mydb", "dbuser", "mypass");
            }
            catch(PDOException $pe)
                {
                    die('Connection error, because: ' .$pe->getMessage());
                }

                $sql = "SELECT `htmlCode` FROM `tickets`";
                $stmt = $conn->query($sql);

                if(!$stmt)
                {
                    die("Execute query error, because: ". $conn->errorInfo());
                }

                $row = $stmt->fetch(PDO::FETCH_ASSOC);

                // print_r ($row); //prints an array 


                 $sql = "INSERT INTO users (row) VALUES (:tickets)";
                 $stmt = $conn->prepare($sql);
                 $stmt->bindParam(':tickets' , $row);
                 $stmt->execute();

?>

您正在将关联数组提取到数据库中。您只需从该数组中获取正确的值,并将其绑定:

$stmt->bindParam(':tickets' , $row['htmlCode']);

bindParam
要求第二个参数是字符串,但
$row
是数组。您甚至使用了
PDO::FETCH_ASSOC
,意思是“关联数组”

不过,修复起来相当简单:

$stmt->bindParam(':tickets' , $row['htmlCode']);
fetch_assoc()在PHP中返回一个关联数组,这就是为什么会得到一个数组

解决方案是这样做:

$stmt->bindParam(':tickets' , $row['htmlCode']);

您可以通过单个查询完成此操作:

INSERT INTO users (row)
SELECT htmlCode FROM tickets
LIMIT 1 /* since your original script doesn't loop, it only copies one row */
$conn->errorInfo()
返回数组,而不是字符串,因此无法直接打印。尝试:

die("Execute query error, because: ". implode(' ', $conn->errorInfo()));

您的
用户
表中确实有一列名为
?我觉得你的剧本比我们在答案中发现的错误要多得多。不。。。。users表还有一个名为tickets的列。。。首先,我尝试从
tickets
表中获取数据,然后尝试将其插入到users表中,该表中还有一列名为tickets。如果您是指
(tickets)
,为什么要编写
(row)
?您知道,
INSERT
用于创建新行,而不是更新现有行,是吗?哦。。我已将(行)与(票证)不匹配,首先应将其插入用户(票证)值(:行)。。非常感谢你。。。使用
UPDATE
而不是
INSERT
解决了整个问题:)您也可以使用加入更新来直接复制数据,而不是两个查询。这会删除错误,但不会插入数据…..它会给出执行查询错误,因为:Array。。。现在怎么办?更新答案以显示如何正确显示错误。