2012-01-14 106 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

相关问题