[英]Update where doesn't exist in php script
我正在尝试完成一个php脚本,该脚本从一个服务器连接上的表中选择所有内容,并将所有内容插入第二台服务器上相同的(转储克隆)表中。 我的连接成功,我的选择查询成功了,但是现在我只需要弄清楚我的INSERT部分。 这是为了从服务器2上的相同表更新服务器2上的表,因此我只想插入自上次插入以来发生的新记录。
我知道可以检查记录是否存在的一种方法是通过检查SESSIONID
这是自动递增主键)。 我觉得这对于那些像这样的问题有一定了解的人应该很简单。 再次,我要连接到服务器1,从cdrdb.session中选择所有内容,获取结果,连接到服务器2,然后将它们插入相同的ambition.session表中(如果尚不存在)。
我尝试通过从服务器1上的表中选择所有内容并循环将要插入的行插入服务器2来采用的路由:
// Create connection
$conn = new mysqli($servername, $username, $password);
$conn2 = new mysqli($servername2, $username2, $password2);
//Query to select * from Session table on server 1
$query1 = "select * from cdrdb.session";
$results = mysqli_query($conn1, $query1);
foreach ($results as $r => $result) {
//This is where I would create my insert statement for each numRow from the fetch but I
would need to check ```SESSIONID``` to see if it exists on server 2. If not, insert it.
}
如果我没有执行fetch / foreach循环,而我只是进行了select查询,这就是我本来会使用的insert语句,即使我知道where not exists
语法错误地使用了此处:
$stmt1 = mysqli_prepare($conn2, "insert into ambition.session a where not
exists(a.SESSIONID)");
mysqli_stmt_execute($stmt1) or die(mysqli_error($conn2));
我不知道是否可以不进行foreach循环而以这种方式进行操作。 最后,如果我知道PHP语法,则可以执行选择查询,然后使用INSERT IGNORE INTO ambition.session。 但是,由于cdrdb.session有35列,所以我不知道如何全部插入。 我不知道是否有办法在不带VALUES(?,?,?,?)的35个问号的情况下做到这一点。
我真的认为foreach循环的第一个选择就是要走的路,我只需要帮助完成循环并构造我的INSERT。
有人可以确认这是最好的方法,并帮助我充实吗?
我发现了一些可能的重复项供您查看:
和stackoverflow之外的另一篇文章:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.