Php MySQL语法错误

Php MySQL语法错误,php,mysql,Php,Mysql,这是一个错误,因为一些被上帝抛弃的原因。我一定是太累了,因为我看不见 我已经确认所有的值都已发布。更糟糕的是,它几乎完全复制了任何可以正常工作的查询 更新: 这个问题已经解决了。事实上,desc没有反勾号。我还将按照建议使用PDO。echo$sql并查看它的实际功能。它看起来很容易成为SQL注入的目标,除非你注意到了这一点。desc不是一个不能用作列名的关键字吗?你有一个名为desc的列,它是一个。你需要用反勾号引用它 $sql = "UPDATE galleries SET name='$na

这是一个错误,因为一些被上帝抛弃的原因。我一定是太累了,因为我看不见

我已经确认所有的值都已发布。更糟糕的是,它几乎完全复制了任何可以正常工作的查询

更新:


这个问题已经解决了。事实上,desc没有反勾号。我还将按照建议使用PDO。

echo$sql
并查看它的实际功能。它看起来很容易成为SQL注入的目标,除非你注意到了这一点。

desc不是一个不能用作列名的关键字吗?

你有一个名为
desc
的列,它是一个。你需要用反勾号引用它

$sql = "UPDATE galleries SET name='$name', desc='$desc', mainthumb='$mt' 
        WHERE id='$id'";

是的,请确保首先清理数据,例如使用

然后回显你的mysql错误(),它会给你更多关于错误在哪里的提示

`desc`='$desc'

在将它们与sql语句混合使用之前,您是否已将它们添加到sql语句中?
desc
是一个,您必须明确:

标识符可以被引用或未引用。如果标识符包含特殊字符或是保留字,则无论何时引用它,都必须对其进行引用。[...]
标识符引号字符是反勾号(“`”): 或者更好:


这可能是另一种处理方法。尽管我会按照沃尔克的建议去PDO。我也会回显,看看它会输出什么。正如Ben所建议的,Desc可能是一个保留字。

我刚刚尝试了
从表1中选择Desc
失败,但引用它成功了。确实如此。-请注意,对于这些保留字中的许多(全部?)字,如果您将列名环绕在反勾中(无论如何,您都应该这样做),它将工作得很好。谢谢,这就是问题所在。当我写它的时候,我甚至都没有想到。至于注射,这是我在试图发现问题时使用的精简版本。
<?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";
?>
$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) . "'
 ";
$sql = "UPDATE `galleries` SET 
           name='".$name."', 
           desc='".$desc."', 
           mainthumb='".$mt."' 
        WHERE id='".$id."'";