Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 函数序列错误,执行准备好的语句时SQL状态为S1010_Php_Sql_Sql Server_Odbc - Fatal编程技术网

Php 函数序列错误,执行准备好的语句时SQL状态为S1010

Php 函数序列错误,执行准备好的语句时SQL状态为S1010,php,sql,sql-server,odbc,Php,Sql,Sql Server,Odbc,我正在将一个旧的Access.mdb移植到一个新的MSSQL数据库,只做了一些小改动。 我有一个简单的循环: //$_new is an MSSQL2011-ODBC-Datasource //$_old is an old MSACCESS.mdb-ODBC-Datasource $devices_result = odbc_exec($_old,"SELECT * FROM Druckerarchiv"); $device_insert_prepare = odbc_prepare($_ne

我正在将一个旧的Access.mdb移植到一个新的MSSQL数据库,只做了一些小改动。 我有一个简单的循环:

//$_new is an MSSQL2011-ODBC-Datasource
//$_old is an old MSACCESS.mdb-ODBC-Datasource
$devices_result = odbc_exec($_old,"SELECT * FROM Druckerarchiv");
$device_insert_prepare = odbc_prepare($_new,"INSERT INTO Geraetearchiv (Kd_Nr,
[Typ],Seriennummer,Firma,Rg_Datum,Dauer,Markerart,Zus_Papierfach,Duplexeinheit,
Universalzufuhr,Plz,Ort,Strasse,Bemerkungen,Telefon,Fax,Ansprechpartner,Abteilung,
Wartung_BEGINN,Wartung_ENDE,Reaktions_TIME,Fix_TIME,Autom_Verl,Vertrags_Nr,
W_EK,W_VK,Wartung_LAUFZEIT,Absprachen,Drucker_USB,Drucker_LAN,Drucker_Parallel,
Drucker_Printserver,Drucker_Printserver_Typ,Drucker_Printserver_Sn,
Drucker_Zusatz,Email,Dienstleister,Garantieverlaengerung,
GVServicedienstleister,Aktiv,Typnummer,Firma_Standort) VALUES
(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,
?,?,?,?,?,?,?,?,?,?,?,?,?)");
while($device = odbc_fetch_array($devices_result))
{
    $device_insert = array(
    utf8_encode($device['KD_NR']),
    utf8_encode($device['Druckertyp']),
    utf8_encode($device['Seriennummer']),
    utf8_encode($device['Firma']),
    $device['Rg-Datum'], 
    (float)$device['Dauer'],
    (float)$device['Markerart'],
    (int)$device['2_Papierfach'],
    (int)$device['Duplexeinheit'],
    (int)$device['Universalzufuhr'],
    utf8_encode($device['Plz']),
    utf8_encode($device['Ort']),
    utf8_encode($device['Straße']),
    utf8_encode($device['Bemerkungen']),
    utf8_encode($device['Telefon']),
    utf8_encode($device['Fax']),
    utf8_encode($device['Ansprechpartner']),
    utf8_encode($device['Abteilung']),
    $device['Wartung_BEGINN'],
    $device['Wartung_ENDE'], 
    (int)$device['Reaktions_TIME'],
    (int)$device['Fix_TIME'],
    (int)$device['Autom_Verl'],
    utf8_encode($device['VERTRAGS_NR']),
    (double)$device['W-EK'],
    (double)$device['W-VK'],
    (float)$device['Wartung_LAUFZEIT'],
    utf8_encode($device['Absprachen']),
    0, 
    (int)$device['Ethernet'], 
    0, 
    0, 
    '', 
    '', 
    (($device['Y-Adapter/Typ'])?
    ("Hat Y-Adapter ".$device['Y-Adapter/Typ']." SN: ".$device['Y-Adapter/SN']):null),
    '', 
    (int)$servicedienstleister[$markerart[
    (int)$device['Markerart']]], //dienstleister
    '', 
    '', 
    1, 
    '',
    '',
    );
    odbc_execute($device_insert_prepare,$device_insert);
}
此循环运行前2到3次。但在那之后,它每一次奔跑和投掷都失败了

Warning: odbc_execute() [function.odbc-execute]: SQL error: 
[Microsoft][SQL Server Native Client 11.0]Function sequence error, 
SQL state S1010 in SQLDescribeParameter
因为这个循环应该进行大约30k次循环,所以我想将它作为准备好的语句运行,并执行大约30k次。 我已经试过关闭自动提交。
我遗漏了什么吗?

打开ODBC跟踪,这将为您提供问题的线索


您要使用SQL Server的事实让我怀疑您达到了SQL Server的一条活动语句限制。也许考虑使用火星或其他任何解决方案(或两个连接)。

< P>谢谢Nick i找到了正确的方法来解决我的问题。我使用了火星连接。 我用正确的连接DSN发布我自己的答案,这样其他有同样问题的开发人员就不需要搜索它了

$_new = odbc_connect('DRIVER={SQL Server Native Client 11.0};'.
                     'SERVER=<ServerIP>;'.
                     'DATABASE=<DatabaseName>;'.
                     'MARS_Connection=yes;',
                     '<user>',
                     '<password>');
$\u new=odbc\u connect('DRIVER={SQL Server原生客户端11.0};')。
“服务器=;”。
“数据库=;”。
'MARS_Connection=yes;',
'',
'');

你说这个
[39x?]
是什么意思?它只是
的快捷方式,,,,,,,,,,…
。39个问号以匹配39列。请使用实际使用的代码更新您的问题,除非您的源代码与上述语句完全匹配。在问题中使用快捷方式是有问题的。@ThomasMueller查询本身运行很好,我删除了不必要的部分以保持文章的小型化。但是如果它对你有帮助,那你就去吧。@BenediktMokroßSimplifying实际上是很好的,但问题是它是一个非法的声明,不明显你遗漏了一些文本。我不知道问题出在哪里。您是否可以尝试简化程序,例如仅插入重现问题所需的列?试图找到问题有时是一种二进制搜索。或者,您可以通过查看数据中的差异(哪些数据起作用,哪些不起作用)来找到原因。