您在這裡

MySQL has gone away query正解

jesselue's 的頭像
jesselue 在 2010-03-02 (二) 22:43 發表

MySQL has gone away query正解:2010年03月02日星期二
適用於:Drupal初學者,想更改Drupal theme外觀 的人,對CSS有興趣的人,對PHP有興趣的人,以前用Dreamweaver的人,以前用其他Blog CMS的人。本文用Drupal6.14,想在Drupal中使用Flash,詳見本文的環境
MySQL has gone away query發生在試作網站 http://usingdrupalchapter4.百加一講壇.tw/ 見圖一
MySQL has gone away query一文中(drupal.org po文)提到的讓主機商加大wait_timeout一事後來不行,主機商反悔了,又將wait_timeout改回原來(我猜是10或15秒),到drupal.org上搜尋,找到一個正解,一個輔助解:
正解:cog.rustyApr. 23, 2009 - 15:43留言。 這是在drupal.org的MySql : " Warning: MySQL server has gone away " - Tune MySql to resolve this problem 頁面下的comment-1511512。 他說,我們可以自己加wait_timeout,作法如下:

  1. 找到includes內的database.mysql.inc,用vim打開,尋找SET NAMES,會看到mysql_query('SET NAMES "utf8"', $connection);,我用Drupal 6.14,是第84行,在這一行下面加入以下這一行:
    mysql_query('SET SESSION wait_timeout = 60', $connection);
  2. 找到database.mysqli.inc,用vim打開,尋找SET NAMES,會看到mysqli_query($connection, 'SET NAMES "utf8"');,我用Drupal 6.14,是第83行,在這一行下面加入以下這一行:
    mysqli_query($connection, 'SET SESSION wait_timeout = 60');

再將這兩個檔案放到虛擬主機即可。我試了一下,可以。

輔助解:在drupal.org的MySql : " Warning: MySQL server has gone away " - Tune MySql to resolve this problem 頁面下的另一個comment提到停用Update status模組,可以加快網站速度。試了一下,網站由原先15秒減為3秒。作法如下:

Click<網站建置><模組><核心-可選擇的>,去掉<Update status>其左的<啟用>勾選。

圖一:MySQL has gone away query問題畫面
本文的環境是:

  1. Drupal 6.14。
  2. apache server設在Windows XP上,以http://localhost/drupal為例。
  3. 所有的檔案在c:/xampp/內,以下的路徑均相對於c:/xampp/。
  4. 各檔案均用vim editor打開,行數以vim內的行數為準。
  5. 主機是遠振資訊cPanel環境。

 
 

附加檔案大小
Image icon mysqlerror.JPG118.49 KB

想詢問如果不使用views~而透過node的方式比如去建立內容中(輸入格式選擇PHP code)
要如何連上資料庫查詢資料表(就已經是這網站了還要寫連上資料庫等等的涵數之類的)呢?不知要去那看相關文件~~和使用~~
比如是寫以下的方式嘛?
<?php

require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

$new_page_node = array('type' => 'page');
?>

人人把心中的愛發揮出來,就能凝聚善的福業,形成善的循環。 (靜思語錄)

大魔王:

連 DB 的話,我簡單分成兩個情況,給你參考一下

1) 單純連上資料庫,不使用 Drupal API

PHP4 下的話,建議用 adodb
PHP5 的話,建議用 PDO,這是 php extension,可從 phpinfo() 看是否有掛載上
非常不建議直接用 mysql_connect 這樣的東西
或是說,應該要完全避免,不過這要談到架構問題,我就不多囉嗦了~ 對細節有興趣的話,我們再談

2) 在 Drupal 之外 (a standalone PHP script),但想利用 Drupal 提供的 API 連 DB

不知道你手邊有沒有 Pro Drupal Development 這本書,Page 91 後面有提到
drupal_bootstrap,單純連 DB 的話,視情況,可以不需要到 "FULL",DRUPAL_BOOTSTRAP_FULL 包含 DRUPAL_BOOTSTRAP_DATABASE
如果是在 module 裡, 當然也不必再 DRUPAL_BOOTSTRAP_DATABASE,直接 db_query 應該就行


<?php
// Make Drupal PHP's current directory.
chdir('/full/path/to/your/drupal/installation');

// Bootstrap Drupal up through the database phase
include_once('./includes/bootstrap.inc');
drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE);

// Now you can run queries using db_query().
$result = db_query('SELECT title FROM {node}');
?>

附帶一提是,如果是把 PHP 當成 shell script 寫,像是 cron 之類的 (此處是指 Linux 下的 cron, 非 web 版的 cron)
預設只會載入 sites/default/settings.php
若有其他的 settings.php,要有 HTTP request 才會用到 (簡單說就是用 browser 去開網頁 drupal 才能判斷要哪一組,不然一律是 default/settings.php)

我對 Drupal 極度不熟,希望有幫忙到!

PHP and MySQL Web Development by Sams Publishing 作者 Lura Thomson、Luke Welling ( http://www.amazon.com/PHP-MySQL-Development-Luke-Welling/dp/0672317842 ),我的是second edition(非常舊版的),II Using MySQL、第十章 Accessing Your MySQL Database from the Web with PHP。 IV Advanced PHP Techniques 第20章 Using Session control in PHP。

這一次並沒看這本871頁的書,直接依照網上cog.rusty的Apr. 23, 2009 - 15:43留言照做。但這是一本好書,以前跳著讀過。

PHP要連MySQL,可至PHP官網上找function,記得均以mysql_起頭,例如以上的:mysql_query('SET SESSION wait_timeout = 60', $connection); 。其他的有mysql_connect、mysql_delect_db、mysql_num_rows...copy 423頁片段如圖。

Hello 大魔王:

有關"就已經是這網站了還要寫連上資料庫等等的涵數之類的",剛寫完,上傳,fail,可能你正在傳,再寫一次如下?

Drupal沒研究過,以前讀過一本Xoops的書,如下:

  1. Xoops用PHP code "print"出來的,print是PHP function,print什麼呢?print mysql database的東西。mysql database的東西怎麼來的?create content產生的node就放入mysql database。因此,架構是:PHP用mysql_query將data自mysql database內讀出,再print上螢幕。中間加油添醋theme、css...一大堆。
  2. 所以,基本上,Xoops網站是由code及data兩部份組成。我猜Drupal差不多,code就是我們下載的module,data就是mysql database。
  3. 是否所有data都在mysql內?不是,image、vedio、flash ...在sites/...內。

以上是我用猜的,不一定對,供參考。