Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1481 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Mssql + print database = failed stmt malgres succes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Mssql + print database = failed stmt malgres succes

n°2286622
Neon67
in ctrl+s we trust
Posté le 18-08-2016 à 01:17:17  profilanswer
 

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
 

Spoiler :

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
mood
Publicité
Posté le 18-08-2016 à 01:17:17  profilanswer
 

n°2286628
Neon67
in ctrl+s we trust
Posté le 18-08-2016 à 09:26:34  profilanswer
 

Voila le code  
 

Spoiler :

$tsql = "Insert INTO software_version ([software_id], [version]) VALUES (?,?)";  
$params = array ($software_id, $version);
$stmt = sqlsrv_query( $conn, $tsql, $params, array("Scrollable" => SQLSRV_CURSOR_KEYSET));
if( $stmt === false ) {      echo "Error insert <br>";
                                    die( print_r( sqlsrv_errors(), true));
                               }
$rows_affected = sqlsrv_rows_affected( $stmt);
$row_count= sqlsrv_num_rows($stmt);
if( $row_count != 0 ) {     ....
 


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
        Print('Begin tgr_software_version_insert');
        open mycursor_tgr_software_version_insert;
 


Voila, si quelqu un a une idee ca serait sympas  :hello:

n°2286629
kao98
...
Posté le 18-08-2016 à 10:11:04  profilanswer
 

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 :o


Message édité par kao98 le 18-08-2016 à 10:12:18

---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°2286630
Neon67
in ctrl+s we trust
Posté le 18-08-2016 à 10:19:59  profilanswer
 

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 ?

n°2286631
kao98
...
Posté le 18-08-2016 à 10:45:24  profilanswer
 

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 :o
 
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.
 


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°2286634
Neon67
in ctrl+s we trust
Posté le 18-08-2016 à 13:26:51  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Mssql + print database = failed stmt malgres succes

 

Sujets relatifs
Problème de récupération d'informations database[résolu] Eclipse : Launch failed : Binary not found
[MSSQL][T-SQL] résultat de 2 requêtes dans un mailMSSQL - SET variable
Google Cloud Print | Oauth2Asynchrone Web.config Database
relocaliser la database dans l´arboresence oraclescript sh et command print
Logins avec Sqlite database browserMssql / Php : module spécifié introuvable
Plus de sujets relatifs à : Mssql + print database = failed stmt malgres succes


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR