0

在 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”

编辑:

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

4

3 回答 3

3

您不能调用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'));

以上几乎是清理数据库输入所必须做的最低限度的工作。但是,如果您使用准备好的语句代替(使用mysqliPDO扩展)会更好。

于 2012-05-16T09:27:42.023 回答
1
$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')");
于 2012-05-16T09:29:05.937 回答
0

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

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')
于 2012-05-16T09:27:27.360 回答