Jak získat output param ze stored procedure v MS SQL
- Michal Kumžák
- Člen | 106
Zdravím
Mám problém s načtením hodnoty parametru po spuštění procedury. Tu spouštím takto:
$sql = "EXEC dbo.hp_InsertHlavickyOZ @Ident, @Sklad=?, @DruhPohybu=?, @RadaDokladu=?, @Insert=?, @IDPosta=?,
@Mena=?, @CisloOrg=?, @DatumPorizeni=?";
$this->helios->query($sql, $sklad, $druhpohybu, $radadokladu, $insert, $posta, $mena, $org, $datum);
Našel sem všemožné postupy jak ten parametr načíst, ale všechno to je při použití buď sqlsrv fcí, nebo čistého PDO. Mám to samozřejmě i funční ve starém webu, ale protože to předělávám do NETTE, tak sem chtěl použít to co mi NETTE poskytuje.
Děkuji za pomoc.
Michal
- ForestCZE
- Člen | 209
Jenom tipuju, ale nemělo by to být takto?
$sql = "EXEC dbo.hp_InsertHlavickyOZ @Ident, @Sklad=?, @DruhPohybu=?, @RadaDokladu=?, @Insert=?, @IDPosta=?, @Mena=?, @CisloOrg=?, @DatumPorizeni=?", $sklad, $druhpohybu, $radadokladu, $insert, $posta, $mena, $org, $datum;
$this->helios->query($sql);
- Michal Kumžák
- Člen | 106
ForestCZE napsal(a):
Jenom tipuju, ale nemělo by to být takto?
$sql = "EXEC dbo.hp_InsertHlavickyOZ @Ident, @Sklad=?, @DruhPohybu=?, @RadaDokladu=?, @Insert=?, @IDPosta=?, @Mena=?, @CisloOrg=?, @DatumPorizeni=?", $sklad, $druhpohybu, $radadokladu, $insert, $posta, $mena, $org, $datum; $this->helios->query($sql);
Měl sem tam chybku, jak sem to různě zkoušel. Správně je to takto, ještě s definicí toho output prametru, což je @Ident.
$sql = "EXEC dbo.hp_InsertHlavickyOZ @Ident=?, @Sklad=?, @DruhPohybu=?, @RadaDokladu=?, @Insert=?, @IDPosta=?,
@Mena=?, @CisloOrg=?, @DatumPorizeni=?";
$this->helios->query($sql, $ident, $sklad, $druhpohybu, $radadokladu, $insert, $posta, $mena, $org, $datum);
No a o ten mi jde, jak ho získat.
Jinak čárka za definicí řetězce je syntax chyba.
- Michal Kumžák
- Člen | 106
nightfish napsal(a):
@MichalKumžák Co vypíše (do Tracy lišty)
bdump($this->helios->query(...)->fetchAll());
?
S fetchAll to nejde, to hazí chybu
SQLSTATE[IMSSP]: The active result for the query contains no fields.
bez fetchAll
Nette\Database\ResultSet
connection private => Nette\Database\Connection
pdoStatement private => PDOStatement
queryString => "EXEC dbo.hp_InsertHlavickyOZ @Ident=0, @Sklad='', @DruhPohybu=13, @RadaDokladu=111, @Insert=1, @IDPosta='',
@Mena='CZK', @CisloOrg=99999, @Datum ... "
result private => null
resultKey private => -1
results private => null
time private => 0.039337158203125
queryString private => "EXEC dbo.hp_InsertHlavickyOZ @Ident=0, @Sklad='', @DruhPohybu=13, @RadaDokladu=111, @Insert=1, @IDPosta='',
@Mena='CZK', @CisloOrg=99999, @Datum ... "
params private => array ()
types private => null
V původním zdroji za použití sqlsrv to mám takto. Ta proměná $this->invoiceId je po spuštění naplněna automaticky.
$params = array(
array(&$this->invoiceId, SQLSRV_PARAM_OUT),
array($sklad, SQLSRV_PARAM_IN),
array($druhpohybu, SQLSRV_PARAM_IN),
array($radadokladu, SQLSRV_PARAM_IN),
array($insert, SQLSRV_PARAM_IN),
array($posta, SQLSRV_PARAM_IN),
array($mena, SQLSRV_PARAM_IN),
array($org, SQLSRV_PARAM_IN),
array($datum, SQLSRV_PARAM_IN)
);
$sql = "EXEC [dbo].[hp_InsertHlavickyOZ] @Ident=?, @Sklad=?, @DruhPohybu=?, @RadaDokladu=?, @Insert=?, @IDPosta=?, @Mena=?, @CisloOrg=?, @DatumPorizeni=?";
$stmt = sqlsrv_query($this->link, $sql, $params);
- Michal Kumžák
- Člen | 106
Zdravím
Tak sem to nakonec zjistil, jak na to.
$sql = "EXEC dbo.hp_InsertHlavickyOZ @Ident=?, @Sklad=?, @DruhPohybu=?, @RadaDokladu=?, @Insert=?, @IDPosta=?,
@Mena=?, @CisloOrg=?, @DatumPorizeni=?";
$pdo = $this->helios->getPdo();
$sth = $pdo->prepare($sql);
$this->invoiceId = (int)$this->invoiceId;
$ident = &$this->invoiceId;
$sth->bindParam(1, $ident, \PDO::PARAM_INT|\PDO::PARAM_INPUT_OUTPUT, 20);
$sth->bindParam(2, $sklad);
$sth->bindParam(3, $druhpohybu);
$sth->bindParam(4, $radadokladu);
$sth->bindParam(5, $insert);
$sth->bindParam(6, $posta);
$sth->bindParam(7, $mena);
$sth->bindParam(8, $org);
$sth->bindParam(9, $datum);
$sth->execute();