Sqlsrv query při Insertu rozdělení datetime v SQLbuilder
- kralik
- Člen | 230
Ahoj,
narazil jsem na takový pro mě zatím zvlášní případ.
Používám NetteDatabase s ovladačem Sqlsrv pro MS SQL, verzi Nette
2.2.10 i 2.3.10
Při požadavku na insert hodnot mi pravděpodobně SQLbuilder vytvoří
hromadnou insert query s rozděleným datetime, resp. někde je datetime
rozdělen někde ne, asi záleží jak se vejde.
Vygenerovaná sql query
- sloupců je v db více, omezil jsem je zde kvůli přehlednosti
<?php
INSERT INTO [FinalEV] ([A], [B], [DateCreated], [Exported])
VALUES ('RKU', 'CUF', '2016-06-09
20:03:28', 0)
,('JSP', 'HAR', '2016-06-09
20:03:28', 0)
,('JCE','ADD', '2016-06-09
20:03:28', 0)
,('JSP', 'HAR', '2016-06-09
20:03:28', 0)
?>
→ Tato query hlásí chybu:
SQLSTATE[42000]: [Microsoft][SQL Server Native Client 11.0][SQL Server]Error
converting data type varchar to numeric
Správně má být
<?php
INSERT INTO [FinalEV] ([A], [B], [DateCreated], [Exported])
VALUES ('RKU', 'CUF', '2016-06-09 20:03:28', 0)
,('JSP', 'HAR', '2016-06-09 20:03:28', 0)
,('JCE','ADD', '2016-06-09 20:03:28', 0)
,('JSP', 'HAR', '2016-06-09 20:03:28', 0)
?>
→ Tato query bez problémy projde
Prosím věděl byste mi někdo poradit co s tím?
Setkal jste se někdo s podobným případem?
Moc dík
- CZechBoY
- Člen | 3608
tzn. vkládat místo nového řádku pouze mezeru?
Proč nepoužíváš MsSql driver? Ten odděluje
právě mezerou.
Editoval CZechBoY (10. 6. 2016 9:55)
- kralik
- Člen | 230
CZechBoY napsal(a):
tzn. vkládat místo nového řádku pouze mezeru?
Proč nepoužíváš MsSql driver? Ten odděluje právě mezerou.
Nechápu otázku ohledně vkládání mezery.
Insert mám takto:
$datD je klasické pole.
array (205)
0 ⇒ array (23)
A ⇒ „PMI“ (3)
B ⇒ „COM“ (3)
DateCreated ⇒ „2016–06–10 10:07:34“ (19)
Exported ⇒ 0
…
V poli u hodnot tedy žádné rozdělení není.
<?php
$this->connection->table('FinalTF')->insert($datD);
?>
Nevím proč mi data rozdělí NetteDatabase…?
mssqldriver se mi pod windows php nepodařilo rozjet a také je sqldriver novější pro php pod windows.
Díky
- CZechBoY
- Člen | 3608
No, že jedinej rozdíl v dotazech je mezera vs nový řádek u hodnoty
času.
To právě dělá ten SqlsrvDriver https://api.nette.org/…ver.php.html#…
- kralik
- Člen | 230
CZechBoY napsal(a):
No, že jedinej rozdíl v dotazech je mezera vs nový řádek u hodnoty času.
To právě dělá ten SqlsrvDriver https://api.nette.org/…ver.php.html#…
Mám v obou ovladačích (SqlsrvDriver i MsSqlDriver) následující
<?php
public function formatDateTime(/*\DateTimeInterface*/ $value)
{
/** @see https://msdn.microsoft.com/en-us/library/ms187819.aspx */
return $value->format("'Y-m-d H:i:s'");
}
?>
Změnil jsem to na:
<?php
public function formatDateTime(/*\DateTimeInterface*/ $value)
{
/** @see https://msdn.microsoft.com/en-us/library/ms187819.aspx */
return $value->format("'Y-m-d\\TH:i:s'");
}
?>
Změnil jsem formát dle verze 2.4 v SqlsrvDriver a chyba se objevuje
stále.
Pořád dochází k rozdělení času od datumu.
Mooc díky