Mssql + print database = failed stmt malgres succes - PHP - Programmation
Marsh Posté le 18-08-2016 à 09:26:34
Voila le code
Spoiler : $tsql = "Insert INTO software_version ([software_id], [version]) VALUES (?,?)"; |
Le stmt retourne toujours false, meme si il a bien inserer dans la base de donnee
L erreur retournee est la suivante
Spoiler : Array( [0] => Array ( [0] => 01000 [SQLSTATE] => 01000 [1] => 0 [code] => 0 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Begin tgr_software_version_insert [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Begin tgr_software_version_insert )) |
La partie en gras est ce que le Trigger ecrit via Print dans le Instead of Insert. Cela m es tres utile lors de l integration direct d un grand nombre de donnees
Spoiler : BEGIN |
Voila, si quelqu un a une idee ca serait sympas
Marsh Posté le 18-08-2016 à 10:11:04
Tu as la réponse dans la question.
Le pilote SQLSRV pour PHP parse les retours fait par le serveur pour savoir si la requête se passe correctement.
Si tu renvoies quelque chose avec print, dans un trigger, il croit que l'insert n'a pas fonctionné car il n'a pas "1 rows inserted" seul.
Il te faut virer le print ... ou bien développer un mode "debug" qui print quand tu en as besoin, mais pas dans un cas comme celui ci.
Et utilise la balise code à la place de la balise spoiler stp
Marsh Posté le 18-08-2016 à 10:19:59
Merci . c est dommage de virer les print car ils sont utile pour la maintenance de la DB. Y a pas une autre methode ? Le mode debug c est quoi exactement ?
Marsh Posté le 18-08-2016 à 10:45:24
Neon67 a écrit : Merci . c est dommage de virer les print car ils sont utile pour la maintenance de la DB. Y a pas une autre methode ? Le mode debug c est quoi exactement ? |
C'était une proposition d'un truc à faire toi même si besoin
Pis y'a plein d'autre façon de journaliser sans passer par des print, pour de la maintenance par exemple.
Une table de log par exemple.
Marsh Posté le 18-08-2016 à 13:26:51
J ai une table de log egalement.
Seulement MSSQL n aime pas les boucles avec les FK. Du coup pour du update on Cascade ou Delete on Cascade j ai du passer par les trigger, le Print me sert par exemple a suivre le cheminement entre autre
Marsh Posté le 18-08-2016 à 01:17:17
Hello a tous
Est-ce que quelqu un sait comment compter le nombre de rows affectées avec une DB MSSQL dans laquelle j ai implémenté des prints pour savoir quel trigger est lancé, pour la gestion en interne.
le sqlsrv_row_count ne marche pas , le stmt me retourne une erreur malgres le faite qu il a bien enregistrer le truc dans la table.
J ai essayé aussi differents types de cursor Key_set , Dynamic etc sans succes
SQLSRV_CURSOR_FORWARD, SQLSRV_CURSOR_STATIC, SQLSRV_CURSOR_DYNAMIC, ou SQLSRV_CURSOR_KEYSET
La seul possibilité pour le moment est de virer tout les prints des triggers (Instead of insert, for update, delete), ce qui n est pas non plus souhaitable
Message édité par Neon67 le 18-08-2016 à 01:18:24