我在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来查询数据库而不是预备语句。
答案 0 :(得分: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'));
答案 1 :(得分: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')");
答案 2 :(得分: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')