2013-04-14 1 views
-1

Mon essai:à l'aide d'inclure des fichiers pour éviter la double codage

1er fichier (connopen.php)

<?php 
    try { 
     $db = new PDO(DB_DSN, DBUSER, DB_PASSWORD); 
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
    } catch (PDOException $e) { 
     die('Cannot connecto to database!'); 
    } 

    try { 
     $db->beginTransaction(); 

Autres fichiers (file1.php, file2.php ...)

<?php 
    include('connopen.php'); 

    ...some code using SQL(SELECT, INSERT INTO, UPDATE, DELETE ....) 

    include('connclose.php'); 
?> 

dernier fichier (de connclose.php)

<?php 
     $db->commit(); 
    } catch (PDOException $e) { 
     $db->rollBack(); 
     ..some code to log errors 
    } 
    $db = null; 
?> 

Ce que est, e lignes une erreur (erreur Parse: erreur de syntaxe, à la fin de $ inattendue /connopen.php en ligne 11) parce que je commence essayer { sur connopen.php et je fermai sur connclose.php

S'il y a une autre façon de faire quelque chose comme ça pour éviter le codage double-triple ... du code source connotent et connclose apprécieront. merci

+0

votre DB Le fichier de fermeture n'est pas encore analysé, de sorte que vous obtenez une erreur de syntaxe, car vous ne pouvez pas diviser les instructions à travers plusieurs inclusions comme vous l'avez fait. – Jon

Répondre

1

Vous avez une erreur significative dans la syntaxe en raison d'une violation de l'instruction try.

Le fichier de connexion doit être juste

<?php 
    try { 
     $db = new PDO(DB_DSN, DBUSER, DB_PASSWORD); 
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
    } catch (PDOException $e) { 
     die('Cannot connecto to database!'); 
    } 

Le bon modèle est de créer un fichier avec l'application bootstraping (paramètres, db et connexions de services externes, etc.) qui achemine le exécution de script à différents scripts php- (fichier1.php, fichier2.php) en fonction des résultats de l'analyse de l'URL.

+0

J'ai aussi essayé de supprimer le premier essai de catch comme vous préférez, mais le résultat était le même – AkisC

+0

'' connclose.php'' a également des erreurs de syntaxe parce que son corps d'essai n'a aucun beginnig. vous devriez supprimer 'include ('connclose.php');' aussi. – zavg

+0

Oui, je le sais! Et c'est la question, Une autre façon de commencer TRY sur connopen.php et TRY se ferme sur le connclose.php pour éviter le double codage de capture par exemple :) – AkisC

1

Bien sûr.
Il suffit de se débarrasser de connclose.php, transactions et try..catches - vous n'avez pas besoin d'eux.
Ainsi, le code devient simple et simpke

1er fichier (connopen.php)

<?php 
$opt = array(
    PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 
    PDO::ATTR_EMULATE_PREPARES => false, 
); 
$db = new PDO(DB_DSN, DBUSER, DB_PASSWORD, $opt); 

Autres fichiers (file1.php, file2.php ...)

<?php 
    include('connopen.php'); 

    ...some code using SQL(SELECT, INSERT INTO, UPDATE, DELETE ....) 
+0

l'erreur est devenue d'essai commencé dans connopen.php et fermé dans connclose.php. merci pour cela améliorer quand même – AkisC

+0

ce n'est pas une "amélioration". c'est le code complet dont vous avez besoin. –

Questions connexes