2011-05-25 52 views
1

我有一個特別棘手的問題,我必須解決但尚未破解堅果。 我已經在drupal問題隊列中發佈了這個消息,但我可能會被忽略。這裏是鏈接到Drupal Issue 1061458將數據插入表中時發生Drupal數據庫錯誤:Escaped Quotes?

這是在我的centos box上使用apache mysql和php的Drupal 6完成的。

我想在每次有人到達一個頁面時插入一個插入,所以我把一個愚蠢的空白頁與創建內容,然後我把我的動態塊在那裏運行我的代碼從模塊。我使塊調用捕獲用戶的IP地址,並將其存儲在數據庫中的標誌,直到該人註冊。

這裏是所生成的錯誤

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group) VALUES ('','')' at line 1 query: INSERT INTO group_landing_connection (ipaddress,group) VALUES ('','') in /var/www/html/sites/all/modules/MODULE/MODULE.module on line 1130. 

與那些確切轉義引號然後在這裏在塊功能

$sql = "INSERT INTO {group_landing_connection} (ipaddress,group) VALUES ('%s','%d')"; 
db_query($sql,$ip,$group); 

其中IP和組上面設置有問題的代碼。這裏是從模塊安裝文件db格式化

$schema['group_landing_connection'] = array(
'fields' => array(
    'dbid' => array('type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE,), 
    'ipaddress' => array('type' => 'varchar', 'length' => '30', 'not null' => TRUE,), 
    'group' => array('type' => 'varchar', 'length' => '10', 'not null' => TRUE,), 
), 
'primary key' => array('dbid'), 

);

我嘗試了很多事情,從設置dbid爲空並設置自動增量值。運行cron並刷新緩存。塊緩存已關閉。我甚至嘗試使用%b作爲二進制數據輸入,但不使用。我試圖刪除替換值和硬編碼數字,而不是運氣。我試着在db調用之後立即執行這個調用,並且它仍然失敗,所以我不認爲這是塊的錯誤。我甚至嘗試用此代碼進行更安全的db_write_record調用

$data = array(
    'ipaddress' => '3', 
    'group' => '3', 
); 
drupal_write_record('np_group_landing_connection', $data); 

但是沒有運氣,任何人有任何想法?

回答

4

集團是一個保留字,重命名列 http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html

+0

或者你可以說group_landing_connection.group 「例外:遵循一個合格的名字一個時期必須是一個標識符一個字,所以它不需要被引用即使它是保留的「 但我只是將其重命名 – AllisonC 2011-05-25 15:20:30

+0

你是上帝!這正是問題所在。我什至不知道,MySQL已經保留的話,他們爲什麼不教這個!好吧,非常感謝你。 – coolestdude1 2011-05-25 15:43:26

+0

在SQL中可能有特殊意義的所有單詞都被保留(然後還有更多)。組是由於「GROUP BY」。請參閱http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html獲取完整列表。 – Berdir 2011-05-25 18:50:20

相關問題