繁体   English   中英

更新PHP脚本中不存在的地方

[英]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。

有人可以确认这是最好的方法,并帮助我充实吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM