NDB INSERT – rozpoznaní stringu omezeno na 20 znaků
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- milroe
- Člen | 7
Narazil na problém, že se mi v dotazu automaticky neescapuje string delší než 20 znaků a nechá v dotazu ? mysql pak vyhodí chybu syntaxe.
<?php
// dump pole $data
// array (5)
// firstname => "Jan" (3)
// lastname => "Novak" (5)
// email => "jan.novak11@seznam.cz" (21)
// agreement => TRUE
// password => "$2y$10$bEfKiPqNvOhthWJfUScT5eyQPPbol7c/kEIrUsCzSiRPgGivGc4bW" (60)
// \Nette\Database\Context $db
$db->query("INSERT INTO `user` SET", $data);
// vygeneruje toto
INSERT INTO `user`
SET (`firstname`, `lastname`, `email`, `agreement`, `password`)
VALUES ('Jan', 'Novak', ?, 1, ?)
?>
to omezení jsem našel tady https://github.com/…rocessor.php#L111 ale vůbec nechápu proč.
Je to chyba, nebo to má nějaký význam a musí se to nějak obejít?
Testováno na Nette 2.1.2.
- Caine
- Člen | 216
To neni vypis do debug baru. To je, kdyz je string vetsi nez 20 znaku, pouzij misto nej otaznik (parametr) a hodnota toho parametru se preda az pri bindovani parametru..
Zkus toto:
$db->query("INSERT INTO user", $data);
Jinak syntaxe se SETem je:
INSERT INTO user SET col_name={expr | DEFAULT}, ...
Editoval Caine (8. 4. 2014 11:46)