2012-01-14 101 views
0

需要幫助。PHP更新查詢:'字段列表'中的未知列

我很難嘗試用PHP更新數據庫。它不斷給我「未知的列在'字段列表'」錯誤。我通過PHPMyadmin運行了相同的命令,並且它正在成功更新數據。

下面是表的結構:

CREATE TABLE `user` (
    `uid`    int AUTO_INCREMENT NOT NULL, 
    `name`   text, 
    `photo_localurl` text, 
    `birthday`  text, 
    `nickname`  text, 
    `height`   text, 
    `lastupdate`  timestamp, 
    PRIMARY KEY (`uid`) 
) ENGINE = InnoDB; 

如果我在列名背部蜱插入

$sql = "UPDATE user SET `height` = '$height' WHERE uid = '$uid'"; 

我得到這個錯誤

UPDATE user SET `height` = '6\' 2"/|!-!|/1.88 m' WHERE uid = '51' Unknown column 'height' in 'field list' 

,如果我插不回剔

$sql = "UPDATE user SET height = '$height' WHERE uid = '$uid'"; 

我得到這個錯誤

UPDATE user SET height = '6\' 2"/|!-!|/1.88 m' WHERE uid = '51' Unknown column 'height' in 'field list' 

如果我使用單剔

$sql = "UPDATE user SET 'height' = $height WHERE uid = $uid"; 

我得到這個錯誤

UPDATE user SET 'height' = 6\' 2"/|!-!|/1.88 m WHERE uid = 51 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 ''height' = 6\' 2"/|!-!|/1.88 m WHERE uid = 51' at line 1 
+0

你有沒有試圖把周圍的表名,'user'反引號?這不是MySQL中的保留關鍵字我認爲,但它是在一些其他基於SQL的系統中,無論如何都不能傷害:) – fivedigit 2012-01-14 10:27:13

+1

你能檢查'show create table user'嗎?'就像你的create table語句。 – greut 2012-01-14 10:28:07

+0

我不在運行時創建表。我只是表明它是我的表格結構。 – 2012-01-14 11:26:35

回答

2

高度值的示例可以是6'2"。當你將其插入到查詢字符串($sql),它結束了看起來像:

$sql = "UPDATE user SET height = '6'2"' WHERE uid = '8'"; 

您怎麼看這個權弄亂了你的字符串?這是搞砸你的報價。

嘗試使用PHP的mysql_real_escape_string()功能:

$sql = "UPDATE user SET height = '" . mysql_real_escape_string($height) . "' WHERE uid = '$uid'"; 
+0

'addslashes()'不應該用於這個。相反,'mysql_real_escape_string()'是更好的解決方案(http://php.net/manual/en/function.mysql-real-escape-string.php)。如果啓用了魔術引號,則應在執行mysql轉義之前先調用「stripslashes()」。 – fivedigit 2012-01-14 10:30:31

+0

@fivedigit:好的電話。我已經更新了我的答案。 – 2012-01-14 10:32:38

+0

$ height的值已經通過mysql_real_escape_string() – 2012-01-14 10:37:21

0

使用mysql_real_escape_string

$sql = "UPDATE `user`.`userit` SET `userit`.`height` = '" . mysql_real_escape_string($height) . "' WHERE uid = '$uid'"; 
+0

對不起,這是myside的一個錯誤。我從來沒有看過數據庫被使用過。有人選擇了不同的數據庫和我,雖然我正在處理實際的數據庫。它幾乎相同的結構,除了少數領域缺失。 發現後我真的很尷尬。我想我需要休息一下。時間去喝啤酒。 – 2012-01-14 13:06:53

相關問題