$sql = "UPDATE galleries SET name='$name', desc='$desc', mainthumb='$mt'
WHERE id='$id'";
这引发了一些错误的原因。我一定太累了,因为我没有看到它。
我已确认所有值都已发布。更糟糕的是,它几乎完全复制任何查询工作正常。
更新
这已经解决了。这是事实,desc没有反引号。我也将按照建议使用PDO。
答案 0 :(得分:7)
desc不是不能用作列名的关键字吗?
答案 1 :(得分:7)
您有一个名为desc
的列,它是reserved word。你需要用反引号引用它。
`desc`='$desc'
答案 2 :(得分:4)
在将它们与sql语句混合之前你有sanitize all the parameters吗?
desc
是reserved word in MySQL,您必须明确mark it as an identifier:
标识符可以引用或不引用。如果标识符包含特殊字符或是保留字,则必须在引用时引用它。 [...]
标识符引号字符是反引号(“`”):
$mysql = mysql_connect(...
$sql = "
UPDATE
galleries
SET
name='" . mysql_real_escape_string($_POST['name'], $mysql) . "',
`desc`='" . mysql_real_escape_string($_POST['desc'], $mysql) . "',
mainthumb='" . mysql_real_escape_string($_POST['mt'], $mysql) . "'
WHERE
id='" . mysql_real_escape_string($_POST['id'], $mysql) . "'
";
答案 3 :(得分:1)
echo $sql
,看看它到底发生了什么。它看起来像是一个简单的SQL注入目标,除非你处理它。
答案 4 :(得分:0)
是的,请确保首先使用mysql_real_escape_string来清理数据。
然后回显你的mysql错误(mysql_error())它会给你更多关于错误在哪里的提示;
<?php
$link = mysql_connect("localhost", "mysql_user", "mysql_password");
mysql_select_db("nonexistentdb", $link);
echo mysql_errno($link) . ": " . mysql_error($link). "\n";
mysql_select_db("kossu", $link);
mysql_query("SELECT * FROM nonexistenttable", $link);
echo mysql_errno($link) . ": " . mysql_error($link) . "\n";
?>
答案 5 :(得分:0)
$sql = "UPDATE `galleries` SET
name='".$name."',
desc='".$desc."',
mainthumb='".$mt."'
WHERE id='".$id."'";
这可能是处理它的另一种方法。虽然我会像VolkerK建议的那样去PDO。我也会Echo看看它会输出什么。同样如Ben所说,Desc可能是一个保留词。