php脚本无法插入mysql,类型为def的元素数。 string与绑定变量的数量不匹配

时间:2017-09-21 15:13:00

标签: php mysql sql

我在完成此脚本时有一些帮助,该脚本从远程服务器上的克隆表中进行选择,并将更新的记录插入到另一台服务器上的相同表中。但是,在powershell中运行此功能时,我会收到消息:Number of elements in type definition string doesn't match number of bind variablesSESSIONID。对于它试图插入的每一行,我得到59行每个错误,所以我知道bind_param的所有59个元素都有问题,但这就是我所知道的。

我对MYSQL很熟悉,但对PHP并不熟悉,除此之外我没有任何问题。我只想要一个稳定的方法从远程服务器读取最新记录并将它们插入新服务器。我使用最大 <?php ini_set('memory_limit', '256M'); // Create connection $conn = new mysqli($servername, $username, $password); $conn2 = new mysqli($servername2, $username2, $password2); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } echo "Connected successfully"; // Check connection2 if ($conn2->connect_error) { die("Connection failed: " . $conn2->connect_error); } echo "Connected successfully"; //Start queries $latest_result = $conn2->query("SELECT MAX(`SESSIONID`) FROM `ambition`.`session`"); $latest_row = $latest_result->fetch_row(); $latest_session_id = $latest_row[0]; //Select All rows from the source phone database $source_data = mysqli_query($conn, "SELECT * FROM `cdrdb`.`session` WHERE `SESSIONID` > $latest_session_id"); // Loop on the results while($source = $source_data->fetch_assoc()) { // Check if row exists in destination phone database $row_exists = $conn2->query("SELECT SESSIONID FROM ambition.session WHERE SESSIONID = '".$source['SESSIONID']."' ") or die(mysqli_error($conn2)); //if query returns false, rows don't exist with that new ID. if ($row_exists->num_rows == 0){ //Insert new rows into ambition.session $stmt = $conn2->prepare("INSERT INTO ambition.session (SESSIONTYPE,CALLINGPARTYNO,FINALLYCALLEDPARTYNO,DIALPLANNAME,TERMINATIONREASONCODE,ISCLEARINGLEGORIGINATING,CREATIONTIMESTAMP,ALERTINGTIMESTAMP,CONNECTTIMESTAMP,DISCONNECTTIMESTAMP,HOLDTIMESECS,LEGTYPE1,LEGTYPE2,INTERNALPARTYTYPE1,INTERNALPARTYTYPE2,SERVICETYPEID1,SERVICETYPEID2,EXTENSIONID1,EXTENSIONID2,LOCATION1,LOCATION2,TRUNKGROUPNAME1,TRUNKGROUPNAME2,SESSIONIDTRANSFEREDFROM,SESSIONIDTRANSFEREDTO,ISTRANSFERINITIATEDBYLEG1,SERVICEEXTENSION1,SERVICEEXTENSION2,SERVICENAME1,SERVICENAME2,MISSEDUSERID2,ISEMERGENCYCALL,NOTABLECALLID,RESPONSIBLEUSEREXTENSIONID,ORIGINALLYCALLEDPARTYNO,ACCOUNTCODE,ACCOUNTCLIENT,ORIGINATINGLEGID,SYSTEMRESTARTNO,PATTERN,HOLDCOUNT,AUXSESSIONTYPE,DEVICEID1,DEVICEID2,ISLEG1ORIGINATING,ISLEG2ORIGINATING,GLOBALCALLID,CADTEMPLATEID,CADTEMPLATEID2,ts,INITIATOR,ACCOUNTNAME,APPNAME,CALLID,CHRTYPE,CALLERNAME,serviceid1,serviceid2) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") or die(mysqli_error($conn2)) ; $stmt->bind_Param("i,s,s,s,i,i,s,s,s,s,i,i,i,i,i,i,i,i,i,s,s,s,s,i,i,i,s,s,s,s,i,i,i,i,s,s,s,i,i,s,i,i,i,i,i,i,i,i,i,s,i,s,s,s,i,s,i,i" ,$source['SESSIONTYPE'] ,$source['CALLINGPARTYNO'] ,$source['FINALLYCALLEDPARTYNO'] ,$source['DIALPLANNAME'] ,$source['TERMINATIONREASONCODE'] ,$source['ISCLEARINGLEGORIGINATING'] ,$source['CREATIONTIMESTAMP'] ,$source['ALERTINGTIMESTAMP'] ,$source['CONNECTTIMESTAMP'] ,$source['DISCONNECTTIMESTAMP'] ,$source['HOLDTIMESECS'] ,$source['LEGTYPE1'] ,$source['LEGTYPE2'] ,$source['INTERNALPARTYTYPE1'] ,$source['INTERNALPARTYTYPE2'] ,$source['SERVICETYPEID1'] ,$source['SERVICETYPEID2'] ,$source['EXTENSIONID1'] ,$source['EXTENSIONID2'] ,$source['LOCATION1'] ,$source['LOCATION2'] ,$source['TRUNKGROUPNAME1'] ,$source['TRUNKGROUPNAME2'] ,$source['SESSIONIDTRANSFEREDFROM'] ,$source['SESSIONIDTRANSFEREDTO'] ,$source['ISTRANSFERINITIATEDBYLEG1'] ,$source['SERVICEEXTENSION1'] ,$source['SERVICEEXTENSION2'] ,$source['SERVICENAME1'] ,$source['SERVICENAME2'] ,$source['MISSEDUSERID2'] ,$source['ISEMERGENCYCALL'] ,$source['NOTABLECALLID'] ,$source['RESPONSIBLEUSEREXTENSIONID'] ,$source['ORIGINALLYCALLEDPARTYNO'] ,$source['ACCOUNTCODE'] ,$source['ACCOUNTCLIENT'] ,$source['ORIGINATINGLEGID'] ,$source['SYSTEMRESTARTNO'] ,$source['PATTERN'] ,$source['HOLDCOUNT'] ,$source['AUXSESSIONTYPE'] ,$source['DEVICEID1'] ,$source['DEVICEID2'] ,$source['ISLEG1ORIGINATING'] ,$source['ISLEG2ORIGINATING'] ,$source['GLOBALCALLID'] ,$source['CADTEMPLATEID'] ,$source['CADTEMPLATEID2'] ,$source['ts'] ,$source['INITIATOR'] ,$source['ACCOUNTNAME'] ,$source['APPNAME'] ,$source['CALLID'] ,$source['CHRTYPE'] ,$source['CALLERNAME'] ,$source['serviceid1'] ,$source['serviceid2']); $stmt->execute(); } } ?> 这是一个AI主键来查看远程服务器上的新行。

请帮我绕过这些错误

Cross-thread operation not valid: Control 'Form1' accessed from a thread other than the thread it was created on.

1 个答案:

答案 0 :(得分:1)

您的表位于 AI自动增加,您无需在 INSERT STATEMENT

中添加 PRIMARY KEY COLUMN
-Xshareclasses

需要更改你的bin_param

$stmt = $conn2->prepare("INSERT INTO ambition.session (SESSIONTYPE,CALLINGPARTYNO,FINALLYCALLEDPARTYNO,DIALPLANNAME,TERMINATIONREASONCODE,ISCLEARINGLEGORIGINATING,CREATIONTIMESTAMP,ALERTINGTIMESTAMP,CONNECTTIMESTAMP,DISCONNECTTIMESTAMP,HOLDTIMESECS,LEGTYPE1,LEGTYPE2,INTERNALPARTYTYPE1,INTERNALPARTYTYPE2,SERVICETYPEID1,SERVICETYPEID2,EXTENSIONID1,EXTENSIONID2,LOCATION1,LOCATION2,TRUNKGROUPNAME1,TRUNKGROUPNAME2,SESSIONIDTRANSFEREDFROM,SESSIONIDTRANSFEREDTO,ISTRANSFERINITIATEDBYLEG1,SERVICEEXTENSION1,SERVICEEXTENSION2,SERVICENAME1,SERVICENAME2,MISSEDUSERID2,ISEMERGENCYCALL,NOTABLECALLID,RESPONSIBLEUSEREXTENSIONID,ORIGINALLYCALLEDPARTYNO,ACCOUNTCODE,ACCOUNTCLIENT,ORIGINATINGLEGID,SYSTEMRESTARTNO,PATTERN,HOLDCOUNT,AUXSESSIONTYPE,DEVICEID1,DEVICEID2,ISLEG1ORIGINATING,ISLEG2ORIGINATING,GLOBALCALLID,CADTEMPLATEID,CADTEMPLATEID2,ts,INITIATOR,ACCOUNTNAME,APPNAME,CALLID,CHRTYPE,CALLERNAME,serviceid1,serviceid2)


                        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") or die(mysqli_error($conn2)) ;