Ошибка при попытке вставить дату в datetime (хранимая процедура php & SQL Server) - PullRequest
1 голос
/ 23 марта 2011

У меня та же проблема, но немного отличающаяся от проблем Нила ( Ошибка при попытке вставить дату в столбец даты и времени ),

Нейл хочет получить дату и время, чтобы он мог использовать CURRENT_TIMESTAMP или GETDATE().

У меня вопрос, как, если у меня есть строка с датой вроде:

$date = '2011-03-29'; 

Затем я хочу вставить в базу данных SQL Server, используя хранимую процедуру с PHP.

 insert into tbl(date) 
 values($date)

Кто-нибудь может помочь? Спасибо

Просто к вашему сведению, у меня есть

Таблица SQL Server:

CREATE TABLE tbl
(
    date datetime
)

Хранимая процедура:

create procedure sp_insertdate
    (@date datetime)
as
begin
    insert into tbl(date) values(@date)
end

PHP код:

<?php

  $date = '2011-03-29';  

  include("con.php");  
  $query  = mssql_init("sp_insertdate");
  mssql_bind($query, "@date", &$date, SQLINT4); //sqlint4 for datetime

  mssql_execute($query);

?>

Результат 1900-1-1,

Я попытался сначала отправить varchar (в php), а затем преобразовать в datetime (в хранимой процедуре), но есть какая-то ошибка.

Неужели я застрял ... есть идеи для этой проблемы?

Я просто хочу вставить строку 2011-03-29 в столбец SQL Server datetime, используя хранимую процедуру из PHP. Извините, потому что я не говорю по-английски

Ответы [ 2 ]

4 голосов
/ 23 марта 2011

Всякий раз, когда у меня возникала такая проблема (с использованием mysql), мне просто нужно было добавить время (полночь) к дате, чтобы она могла распознать ее как datetime, которую она ожидает. Попробуйте это:

$date = '2011-03-29';
$date .= ' 00:00:00';

Затем обработайте все остальное, как вы бы. Это работает для mysql, может быть, sql-серверу это тоже нужно.

0 голосов
/ 24 марта 2011

я получил ответ от своих друзей,

просто положил mssql_bind ($ query, "@date", & $ date, SQLCHAR);// не sqlint4 для datetime, а только sqlchar или sqlvarchar

однако, благодаря Groovetrain, я могу также поставить $ date = '2011-03-29 00:00:00' и затем поставить

mssql_bind ($ query, "@date", & $ date, SQLCHAR, false, false, 19);// 19 длина строки даты

...