Σύνδεση με την βάση και κλείσιμο μετά

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
dpa
Δημοσιεύσεις: 631
Εγγραφή: 29 Μαρ 2008 13:55

Σύνδεση με την βάση και κλείσιμο μετά

Δημοσίευση από dpa » 28 Δεκ 2013 14:40

Παιδιά χρόνια πολλά.

Έχω ένα πρόβλημα

Μέχρι τώρα έκανα σύνδεση με την βάση και την άφηνα ανοιχτή.

Κώδικας: Επιλογή όλων

   // κάνω σύνδεση και η σύνδεση μετά δεν κλείνει.
   $mysqli = new mysqli('localhost','root','','db_name');
   /*
   @ $db->query("SET NAMES 'utf8'");
   @ $db->query("SET COLLATION_CONNECTION=utf8");
   @ $db->query("SET CHARACTER_SET_CLIENT=utf8");
   @ $db->query("SET CHARACTER_SET_RESULTS=utf8"); */

   
$mysqli->close();

if( $mysqli->connect_errno ) 
{ 
echo 'false';    
} else { 
echo 'connect'; 
}

Παρόλο που παραπάνω έχω κλείσει την βάση μου λέει connect.

Εγώ θέλω να τα έχω σε μια function και να ανοίγω την βάση και στο τέλος να τσεκάρω αν είναι ανοιχτή και να την κλείνω.

Πως θα το κάνω ???

Κώδικας: Επιλογή όλων


function db() {
   @ $mysqli = new mysqli('localhost','root','','db_name');

   @ $db->query("SET NAMES 'utf8'");
   @ $db->query("SET COLLATION_CONNECTION=utf8");
   @ $db->query("SET CHARACTER_SET_CLIENT=utf8");
   @ $db->query("SET CHARACTER_SET_RESULTS=utf8");
   return $db;
}

$db = db();

if( $db ) {
   $db->close();
   echo 'close';
}else { 
   echo 'open';
}

αλλά δεν δουλεύει


geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Σύνδεση με την βάση και κλείσιμο μετά

Δημοσίευση από geomagas » 28 Δεκ 2013 16:17

Χρόνια πολλά και σε σένα!

Απορώ: Το δεύτερο κομμάτι δεν σου βγάζει κανένα λάθος;
Λογικά, το return $db; θα πρέπει να επιστρέφει... το τίποτα!

Θεωρώ ότι αν αλλάξεις το

Κώδικας: Επιλογή όλων

   @ $mysqli = new mysqli('localhost','root','','db_name');
με

Κώδικας: Επιλογή όλων

   @ $db = new mysqli('localhost','root','','db_name');
δεν έχει λόγο να μη δουλέψει.

EDIT: Επίσης, η λογική του if είναι λάθος. Θα πρέπει να είναι:

Κώδικας: Επιλογή όλων

if( $db ) {
  // επιτυχής σύνδεση, κλείσε την
}else {
  // ανεπιτυχής σύνδεση (όχι open)
}

dpa
Δημοσιεύσεις: 631
Εγγραφή: 29 Μαρ 2008 13:55

Σύνδεση με την βάση και κλείσιμο μετά

Δημοσίευση από dpa » 28 Δεκ 2013 23:01

Φίλε βρήκα αυτό

http://www.w3schools.com/php/func_misc_ ... status.asp

http://www.php.net/manual/en/function.c ... status.php

Το κάνω έτσι αλλά δεν εμφανίζει σωστά την κατάσταση

Κώδικας: Επιλογή όλων

function db() {
   @ $db = new mysqli('localhost','root','','db_name');
/*
   @ $db->query("SET NAMES 'utf8'");
   @ $db->query("SET COLLATION_CONNECTION=utf8");
   @ $db->query("SET CHARACTER_SET_CLIENT=utf8");
   @ $db->query("SET CHARACTER_SET_RESULTS=utf8");
*/
   return $db;
}

$db = db();
mysqli_close($db);

echo connection_status();

Μου εμφανίζει 0
Θα έπρεπε να μου εμφανίζει 1

Σύμφωνα με αυτό
0 - CONNECTION_NORMAL - connection is running normally
1 - CONNECTION_ABORTED - connection is aborted by user or network error
2 - CONNECTION_TIMEOUT -  connection timed out
3 - CONNECTION_ABORTED & CONNECTION_TIMEOUT


Πως να το κάνω ???

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Σύνδεση με την βάση και κλείσιμο μετά

Δημοσίευση από geomagas » 28 Δεκ 2013 23:42

Η connection_status() δεν έχει καμία σχέση με MySQL ή με ΒΔ γενικά. Οπότε, την ξεχνάμε...

Όταν δημιουργείς το mysqli object, αυτό δημιουργείται πάντα, είτε πετύχει η σύνδεση είτε όχι.
Ένας τρόπος να ελέγξεις αν πέτυχε η σύνδεση είναι το ->connect_error (PHP>=5.3.0).

Τη συνάρτησή σου θα την υλοποιούσα έτσι:

Κώδικας: Επιλογή όλων

function db() {
   @ $db = new mysqli('localhost','root','','db_name');
   if($db->connect_error)
      return null;
   else {
      // further initialization
      return $db;
   }
}
Παρατηρείς ότι, σε περίπτωση αποτυχίας, επιστρέφω null και όχι το object. Αυτό με διευκολύνει παρακάτω, στο if:

Κώδικας: Επιλογή όλων

$conn=db();
if($conn)
   {
   // use the db
   $conn->close();
   }
else
   echo "No joy: {$db->connect_error}";
Για να πω την αλήθεια, δεν μπορώ να φανταστώ γιατί θέλεις οπωσδήποτε να καλέσεις την close(), αλλά υποθέτω ότι θα έχεις τους λόγους σου...

dpa
Δημοσιεύσεις: 631
Εγγραφή: 29 Μαρ 2008 13:55

Σύνδεση με την βάση και κλείσιμο μετά

Δημοσίευση από dpa » 29 Δεκ 2013 09:54

Σε ευχαριστώ πάρα πολύ για την απάντησή σου.

Απλά θέλω ώστε να μην μένει ανοιχτή η σύνδεση πάντα και έτσι φορτώνεται ο server.

Θέλω κάθε φορά σε ένα query να ανοίγω και να κλείνω την βάση και για λόγους ασφάλειας.

Αλλά όταν την κλείνω πετάει τα error.

Εγώ θέλω όταν κλείσει η σύνδεση με την βάση να εμφανίσω ένα κείμενο χωρίς να φαίνονται τα error.

Απλά θα ελέγξω αν έκλεισε.

Αλλά δεν βρίσκω κάποια συνάρτηση που να λέει : έκλεισε δεν έκλεισε η βάση

κατάλαβες ??

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Σύνδεση με την βάση και κλείσιμο μετά

Δημοσίευση από geomagas » 29 Δεκ 2013 13:40

dpa έγραψε:Σε ευχαριστώ πάρα πολύ για την απάντησή σου.

Απλά θέλω ώστε να μην μένει ανοιχτή η σύνδεση πάντα και έτσι φορτώνεται ο server.

Θέλω κάθε φορά σε ένα query να ανοίγω και να κλείνω την βάση και για λόγους ασφάλειας.
Οκ, εσύ ξερεις.
dpa έγραψε: Αλλά όταν την κλείνω πετάει τα error.
Ποιά errors?
dpa έγραψε: Εγώ θέλω όταν κλείσει η σύνδεση με την βάση να εμφανίσω ένα κείμενο χωρίς να φαίνονται τα error.

Απλά θα ελέγξω αν έκλεισε.

Αλλά δεν βρίσκω κάποια συνάρτηση που να λέει : έκλεισε δεν έκλεισε η βάση

κατάλαβες ??
Υπάρχει δηλαδή περίπτωση να αποτύχει η close();

Ωραία, και γιατί δεν εκτελείς μία query μετά την close() με ένα @ μπροστά, κι αν σου επιστρέψει δεδομένα σημαίνει ότι η σύνδεση είναι ακόμα ανοιχτή;

EDIT: Μετά την απάντηση, ανέτρεξα στο manual. Τελικά η close() επιστρέφει boolean, που σημαίνει ότι μπορείς να κάνεις

Κώδικας: Επιλογή όλων

if($conn->close())
  echo "DB Closed";
else
  echo "DB still Open!";

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες