字符串输入的MYSQL更新语法错误

时间:2012-10-15 20:22:18

标签: php mysql

我的代码

    $count++;
    $yesstring = 'MATCH';

    echo $count . '. RESULT ' . $idcheck . ': ' . $phonecheck . ' was matched. <br />';

    $matchquery = sprintf("UPDATE `list` SET match = `%s` WHERE homephone = `%s` LIMIT 1",
        mysql_real_escape_string($yesstring),
        mysql_real_escape_string($phonecheck));

    $matchresult = mysql_query($matchquery);

    if (!$matchresult) {
        die("Invalid query: " . mysql_error());
    }

这是我的错误

查询无效:您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以便在第1行的'match = MATCH WHERE homephone = (999) 999-9999 LIMIT 1'附近使用正确的语法

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:2)

match是MySQL中的reserved word。用反引号逃脱它:

 UPDATE `list` SET `match` = ...

答案 1 :(得分:1)

当你应该使用常规报价时,你正在使用反引号。反引号保留用于转义表名或列名:

INSERT INTO `foo` VALUES ('value')

虽然您正在正确转义SQL,但调用mysql_real_escape_string可能会被证明是一种持续的麻烦。从长远来看,切换到mysqli或PDO会使编写正确的SQL变得更加容易。