字段列表错误中的 MySQL 未知列


MySQL Unknown column in fieldlist error

当我在PHP中执行此语句时出现此错误:

    $sql = mysql_real_escape_string("INSERT INTO `locations`(`id`,`anchor_url`,`anchor_title`) 
    VALUES (1,`http%3A%2F%2Fmaps.google.com%2Fmaps%2Fms%3Fmsid%3D210426849026628615459.0004bd6aaf4e431aab7f9%26msa%3D0%26output%3Dembed`, `Se "Mar Menor" på kartet`)");

我认为这与引号有关,但是我尝试了不同的引号,这为我提供了另一个错误,说我的SQL语法(单引号)有错误。

执行上述查询时引发的错误为:

未知列 'http%3A%2F%2Fmaps.google.com%2Fmaps%2Fms%3Fmsid%3D210426849026628615459.0004bd6aaf4e431aab7f9%26msa%3D0%26output%3Dembed' in 'field list'

编辑:

答案被接受,但仅限于其中的一部分,因为我没有测试提供的其他信息:我使用 PDO 来查询数据库,而不是使用准备好的语句。

不能对整个查询调用mysql_real_escape_string;必须分别对每个变量调用它。

例:

// THIS IS AN EXAMPLE ONLY -- NOT A BEST PRACTICE!
$sql = "INSERT INTO `locations`(`id`,`anchor_url`,`anchor_title`) VALUES ".
       "(1, '".mysql_real_escape_string('http://...')."', ".
       "'".mysql_real_escape_string('whatever')."')";

您还必须注意mres生成的值周围的单引号;这些是绝对关键的

当然,上面看起来非常丑陋,所以你可以把它美化一点:

// THIS IS AN EXAMPLE ONLY -- NOT A BEST PRACTICE!
$sql = sprintf("INSERT INTO `locations`(`id`,`anchor_url`,`anchor_title`) VALUES ".
               "(1, '%s', '%s')",
               mysql_real_escape_string('http://...'),
               mysql_real_escape_string('whatever'));

以上几乎是清理数据库输入所必须做的最低限度。但是,如果您改用预准备语句(使用 mysqli 或 PDO 扩展),那就更好了。

$sql = mysql_real_escape_string("INSERT INTO 
locations(id,anchor_url,anchor_title) VALUES (1,'http%3A%2F%2Fmaps.google.com%2Fmaps%2Fms%3Fmsid%3D210426849026628615459.0004bd6aaf4e431aab7f9%26msa%3D0%26output%3Dembed', 'Se "Mar Menor" på kartet')");

将撇号放在字符串值中,您有一个 ' 字符

INSERT INTO `locations`(`id`,`anchor_url`,`anchor_title`) 
VALUES (1,'http%3A%2F%2Fmaps.google.com%2Fmaps%2Fms%3Fmsid%3D210426849026628615459.0004bd6aaf4e431aab7f9%26msa%3D0%26output%3Dembed', 'Se "Mar Menor" på kartet')