سؤال

لقد بدأت مؤخرا باستخدام الإطار زند.بدأت النامية على المحلي XAMPP الخادم التي جرت على ما يرام ولكن عندما حملت إلى 1and1 حساب وأظل الحصول على الخطأ التالي:

الرسالة:SQLSTATE[HY000] [2002] لا يمكن الاتصال خادم MySQL المحلية من خلال socket '/var/run/mysqld/mysqld.جورب' (2)

لقد حاولت تغيير الموارد.db.params.unix_socket الخط في التطبيق.ini إلى مختلف تلك المذكورة في phpinfo ولكن مع أي نجاح.وجدت هنا أن شخصا ما أجاب

هو خادم MySQL على نفس المضيف مثل تطبيقات الويب ؟ إذا لم يكن كذلك ، لا يمكن استخدام اتصال مأخذ توصيل ، سوف تحتاج إلى الاتصال عبر TCP.

أعتقد أن هذا هو الحال مع استضافة المواقع على الشبكة.كيف يمكنني تغيير ZF للاتصال عبر TCP بدلا من ذلك ؟ أنا حاليا باستخدام PDO_MYSQL.

هل كانت مفيدة؟

المحلول 2

وكنت قد تركت السطر:

defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'development'));

وفي بلدي index.php كما هو ولكن غيرت العام / هتكس إلى

SetEnv APPLICATION_ENV production

ويبدو أن هتكس لم يتم قراءتها. لقد غيرت بيان آخر في index.php إلى "الإنتاج" لاستخدام إعدادات قاعدة بيانات الإنتاج وأنه يعمل. محبطة جدا. وأتساءل لماذا متغير البيئة لم يتم قراءتها. شكرا لمساعدتكم.

نصائح أخرى

كيف يمكنك الاتصال إلى الخلية يعتمد على معايير تمر mysql_connect().إذا كنت تمرير مسار ملف ، أي. /var/run/mysqld/mysqld.sock, انه ذاهب الى محاولة اتصال مأخذ توصيل.إذا كنت تمر عليه اسم المضيف ، وسوف محاولة اتصال TCP.

تحتاج إلى العثور على المضيف (أو الفكرية) من خادم mysql, والاتصال به مثل هذا:

mysql_connect('127.0.0.1:3306',$username,$password);

احتمال ZF ، يمكنك فقط تحديد هذا في ملف التكوين حيث يمكنك تخزين إعدادات قاعدة البيانات ، أو عند الاتصال إلى قاعدة البيانات باستخدام host الإعداد:

$db = new Zend_Db_Adapter_Pdo_Mysql(array(
    'host'     => '127.0.0.1',
    'username' => 'webuser',
    'password' => 'xxxxxxxx',
    'dbname'   => 'test'
));

تحرير:إذا كنت هي يمر السليم المضيف/الميناء المضيف المعلمة mysql_connect() والحصول على هذه الرسالة ، ثم فمن الأرجح ملقم التكوين المسألة.

حاول ضبط mysql.default_socket الإعداد سواء في php.ini أو في الجزء العلوي من رمز التطبيق الخاص بك باستخدام ini_set()

ini_set('mysql.default_socket','/path/to/real/socket.sock');

سيكون لديك لمعرفة إلى أين مأخذ الملف.في كثير من الأحيان انها '/var/lib/mysql/mysql.جورب', ولكن أعتقد أنه نظام يعتمد.

والإطار زند ديه الخيار في unix_socket ديسيبل بارامس، ببساطة استخدامه

 $config= array(
 'db' => array(
'host'   => 'localhost',
'username' => 'user',
'password' => 'pass',
'dbname' => 'dbname',
'dbprefix' => '',
'unix_socket' => '/var/lib/mysqld/mysqld.sock'
  )
);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top