MySQL语法错误

时间:2009-12-12 11:46:32

标签: php mysql

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

这引发了一些错误的原因。我一定太累了,因为我没有看到它。

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

更新

这已经解决了。这是事实,desc没有反引号。我也将按照建议使用PDO。

6 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:7)

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

`desc`='$desc'

答案 2 :(得分:4)

在将它们与sql语句混合之前你有sanitize all the parameters吗? descreserved 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) . "'
 ";

甚至更好:use prepared statements

答案 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可能是一个保留词。