PHP SQLSRV Вставить остальное обновление - PullRequest
0 голосов
/ 12 сентября 2018

Я в процессе миграции проекта из MySQL в MS SQL. Это сильно отличается от того, к чему я привык, потому что я перехожу из 1 таблицы MySQL в MS SQL View and Table. Я хотел бы придерживаться MySQL, но это вне моего контроля.

Мне нужно вставить данные, или обновить данные в таблицу sql. Вот моя попытка и ошибка. Пожалуйста, помогите:

$serverName = "myserver";
$connectionInfo = array( "Database"=>"sqldatabasename", "UID"=>"myusername", "PWD"=>"youguysarethebest" );
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false ) {
 die( print_r( sqlsrv_errors(), true));
}

$sql = "INSERT INTO CallSettings (Order_Number, ODetail_id, Serial_Id, AssignedPerson, Status, Comments, Customer_IPAddress, customer_assistance_name, customer_assistance_number, customer_assistance_email,networksettings, addressbook, accountcodes, installedprintdrivers) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,     ?, ?) ELSE UPDATE CallSettings SET (Order_Number= (?), ODetail_id= (?), Serial_Id= (?), AssignedPerson= (?), Status= (?), Comments= (?), Customer_IPAddress= (?), customer_assistance_name= (?), customer_assistance_number=(?), customer_assistance_email= (?), networksettings= (?), addressbook= (?), accountcodes= (?),     installedprintdrivers= (?))";

$params = array($Order_Number, $ODetail_id, $Serial_Id, $AssignedPerson, $Status, $Comments,         $Customer_IPAddress, $customer_assistance_name, $customer_assistance_number, $customer_assistance_email,         $networksettings, $addressbook, $accountcodes, $installedprintdrivers);

$stmt = sqlsrv_query( $conn, $sql, $params);
if( $stmt === false ) {
 die( print_r( sqlsrv_errors(), true));
}
sqlsrv_close($conn);

Error

Array ( [0] => Array ( [0] => 07002 [SQLSTATE] => 07002 [1] => 0 [code] => 0 [2] => [Microsoft][SQL Server Native Client 11.0]COUNT field incorrect or syntax error [message] => [Microsoft][SQL Server Native Client 11.0]COUNT field incorrect or syntax error ) )

1 Ответ

0 голосов
/ 12 сентября 2018

Сообщение об ошибке вызвано тем, что вы передаете меньше параметров, чем ожидалось (14 вместо 28).

Вам нужны параметры для всех ? отметок в запросе.Вы передаете параметры только для первых 14 элементов (часть обновления имеет еще 14 параметров, даже если они совпадают с первой частью), поэтому необходимо повторить массив параметров в вызове запроса (в 2 раза больше, чем список параметров).) передать все значения.

$stmt = sqlsrv_query( $conn, $sql, array_merge($params,$params));
...