هل يجب إغلاق اتصالات SQL المفتوحة باستخدام PDO في PHP؟
سؤال
عندما أقوم بفتح اتصال MySQL في PHP باستخدام وظائف MySQL المضمنة في PHP فقط، أفعل ما يلي:
$link = mysql_connect($servername, $username, $password);
mysql_select_db($dbname);
//queries etcetera
mysql_close($link);
عندما أقوم بفتح اتصال مع شركة تنمية نفط عمان، يبدو الأمر كما يلي:
$link = new PDO("mysql:dbname=$dbname;host=$servername",$username,$password);
//prepare statements, perform queries
هل يجب علي إغلاق الاتصال بشكل صريح كما أفعل مع mysql_connect()
و mysql_close()
؟إذا لم يكن الأمر كذلك، فكيف تعرف PHP عندما انتهيت من الاتصال؟
تيا.
المحلول
استخدم $link = null
للسماح PDO أعلم أنه يمكن إغلاق الاتصال.
وعند اتصال ناجح إلى قاعدة البيانات، يتم إرجاع مثيل من فئة PDO لالسيناريو الخاص بك. يبقى اتصال نشط لعمر هذا الكائن شركة تنمية نفط عمان. لإغلاق الاتصال، تحتاج إلى تدمير الكائن عن طريق ضمان أن يتم حذف كافة المراجع المتبقية إلى ذلك - يمكنك القيام بذلك عن طريق تعيين NULL إلى المتغير الذي يحمل الكائن. إذا كنت لا تفعل ذلك صراحة، سوف PHP تلقائيا إغلاق الاتصال عندما ينتهي البرنامج النصي.
اقتباس فقرة>نصائح أخرى
ولا تقدم شركة تنمية نفط عُمان مثل هذه الوظيفة بمفردها.تتم إدارة الاتصالات عبر PDO بشكل غير مباشر عبر إعادة حساب كائنات PDO في PHP.
لكن في بعض الأحيان قد ترغب في إغلاق الاتصال على أي حال، بغض النظر عن إعادة العد.إما لأنك لا تستطيع التحكم فيه، أو تحتاج إليه لأغراض الاختبار أو ما شابه ذلك.
يمكنك إغلاق ماي اس كيو ال اتصال مع شركة تنمية نفط عمان عن طريق تشغيل استعلام SQL.كل مستخدم قادر على الاتصال بخادم MySQL قادر على ذلك KILL
على الأقل الموضوع الخاص به:
/*
* Close Mysql Connection (PDO)
*/
$pdo_mysql_close = function (PDO $connection) {
$query = 'SHOW PROCESSLIST -- ' . uniqid('pdo_mysql_close ', 1);
$list = $connection->query($query)->fetchAll(PDO::FETCH_ASSOC);
foreach ($list as $thread) {
if ($thread['Info'] === $query) {
return $connection->query('KILL ' . $thread['Id']);
}
}
return false;
};
$pdo_mysql_close($conn);
وثائق Mysql ذات الصلة:
أسئلة Stackoverflow ذات الصلة:
- إغلاق PHP PDO ()؟ (أبريل 2012)
عند انتهاء البرنامج النصي PHP المنفذة، يتم إغلاق كافة الاتصالات. أيضا لم يكن لديك لإغلاق صراحة الاتصال مع mysql_close()
.
ويمكنك أيضا تقييد اتصالات لفي الوظائف المحلية. وبهذه الطريقة يتم إغلاق الاتصال بمجرد الانتهاء من وظيفة.
ورؤية حسنا كما تم تعيين $link
لشركة تنمية نفط عمان كائن، فإن PHP تعيين هذا لاغيا بمجرد تشغيل البرنامج النصي بحيث لم يعد كائن. لذلك هل يمكن أن مجرد القيام به:
$link = new PDO("mysql:dbname=$dbname;host=$servername",$username,$password);
//prepare statements, perform queries
$link = null;
ومن ما جمع لم أستطع رؤية أي حال لإغلاقه في دليل بي، وأمثلة من النصوص تطلعت بسرعة في أبدا إغلاق الاتصال في أي حال من ما كنت أرى.