Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Подскажите как исправить sqlsrv_prepare, чтобы запись в таблицу была не в цикле.  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 90
Добрый день. Подскажите как исправить sqlsrv_prepare, чтобы запись в таблицу была не в цикле.

Есть примерно такой INSERT :
$tsql = "INSERT INTO [table]
      (
         [data1],
        [data2]
      )  
      VALUES   
      (?, ?)";  
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC ) ) 
{
      $tparams = [
          $row['tdata1'],
          $row['tdata2']->format( 'Y-d-m H:i:s' )
     ];

    $tstmt = sqlsrv_prepare($conn, $tsql, $tparams);
    sqlsrv_execute($tstmt); 
    sqlsrv_free_stmt($tstmt);  
}


В этом примере запись идет в цикле.
Можно ли как то сделать присваивание параметров в цикле, а sqlsrv_execute вне цикла.

Например в mysql это выглядело бы так:
$tsql = "INSERT INTO `table`
      (
         `data1`,
        `data2`
      )  
      VALUES   
      (?, ?)";  

$stmt = $mysqli->prepare($tsql)

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC ) ) 
{
        $tparams = [
            $row['tdata1'],
            $row['tdata2']->format( 'Y-d-m H:i:s' )
        ];

       $stmt->bind_param("ss",  $tparams);
}
 
$stmt->execute();

То есть, чтобы был только один sql запрос.
6 сен 19, 11:34    [21965199]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как исправить sqlsrv_prepare, чтобы запись в таблицу была не в цикле.  [new]
iiyama
Member

Откуда:
Сообщений: 601
Hopfen_Artur,
скорее всего Вам нужно задать вопрос здесь
6 сен 19, 11:55    [21965222]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как исправить sqlsrv_prepare, чтобы запись в таблицу была не в цикле.  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 90
iiyama,

за дублирование темы тут не банят?)
6 сен 19, 11:55    [21965223]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как исправить sqlsrv_prepare, чтобы запись в таблицу была не в цикле.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36377
Модератор: Вы из какого-то скриптового языка пытаетесь писать в MySql и задаете вопрос на форуме по MSSQL? А почему не на форуме молодых домохозяек?
6 сен 19, 11:56    [21965224]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как исправить sqlsrv_prepare, чтобы запись в таблицу была не в цикле.  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 90
Гавриленко Сергей Алексеевич,

ну просто у них официальная документация на сайте
https://docs.microsoft.com/en-us/sql/connect/php/sqlsrv-prepare?view=sql-server-2017

думал можно тут.
6 сен 19, 11:58    [21965228]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как исправить sqlsrv_prepare, чтобы запись в таблицу была не в цикле.  [new]
Hopfen_Artur
Member

Откуда:
Сообщений: 90
а mysql это для примера, запись нужна в mssql
6 сен 19, 12:00    [21965231]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как исправить sqlsrv_prepare, чтобы запись в таблицу была не в цикле.  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1434
Hopfen_Artur
а mysql это для примера, запись нужна в mssql
Да какая разница куда если вопрос про откуда? Сервер сам себе запросы не посылает и не организовывает их генерацию и привязку к клиентским параметрам. Ищите как в используемом вами средстве разработки организована работа с передачей параметров в запросы. Это все на клиентской стороне, сервер тут вообще не при делах.
6 сен 19, 12:05    [21965238]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как исправить sqlsrv_prepare, чтобы запись в таблицу была не в цикле.  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4448
Sergey Sizov, ну человек просто интересуется как bulk'ом вставлять из PHP в ms sql...
6 сен 19, 12:35    [21965265]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как исправить sqlsrv_prepare, чтобы запись в таблицу была не в цикле.  [new]
PizzaPizza
Member

Откуда:
Сообщений: 280
sqlsrv_prepare подготавливает (что не удивительно) запрос, а не исполняет. Исполнением занимается например sqlsrv_execute и без цикла вы можете только делать так:

VALUES (?, ?), (?, ?), (?, ?), (?, ?), (?, ?), (?, ?), (?, ?), (?, ?), (?, ?), (?, ?), (?, ?), (?, ?), (?, ?), (?, ?), (?, ?)...............

и в sqlsrv_prepare передавать все ваши значения
иначе - цикл
6 сен 19, 18:04    [21965574]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить