0
if(isset($_POST['Update'])) {
$placename = $_POST['placename'];
$description = trim(addslashes($_POST['description']));
$hotel = $_POST['hotel'];
$transport = $_POST['transport'];
$map = $_POST['map'];
$sqlp = "UPDATE places SET placename = $placename, description = $description, hotel = $hotel, transport = $transport, map = $map WHERE place_id = ". $sPlace['place_id'];
connection();
if(mysql_query($sqlp)) {
    echo "Successfully Updated";
} else {
    echo mysql_error();
}
}

错误消息如下 -

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 ' 附近使用的正确语法

map= 地图 WHERE place_id = 54' 在第 1 行

4

3 回答 3

2

您在该代码中的错误是您没有在变量周围添加引号,它应该是这样的:

$query = "UPDATE `table` SET `name`='".mysqli_real_escape_string($_POST['name'])."' WHERE `id`=1";

但是请尝试将 PDO 与事务一起使用,因为您将能够调试任何错误并且您不必担心 SQL 注入。

试试这个:(你会看到错误,如果不正常,它会回滚)

$db = new PDO('mysql:host=localhost;dbname=databaseName', 'username', 'password', array(PDO::ATTR_EMULATE_PREPARES => false));

$placename = $_POST['placename'];
$description = trim(addslashes($_POST['description']));
$hotel = $_POST['hotel'];
$transport = $_POST['transport'];
$map = $_POST['map'];

try {

    $db->beginTransaction();

    $stmt = $db->prepare("UPDATE `places` SET `placename`=:placename, `description`=:description, `hotel`=:hotel, `transport`=:transport, `map`=:map WHERE `place_id`=:place_id");
    $stmt->execute(array(':placename' => $placename, ':description' => $description, ':hotel' => $hotel, ':transport' => $transport, ':map' => $map, ':place_id' => $sPlace['place_id']));

    $db->commit();

} catch(PDOException $ex) {
    $db->rollBack();
    echo $ex->getMessage();
}
于 2012-08-26T01:49:53.857 回答
0

您的 SQL 语法有错误...' map = map WHERE place_id = 54' at line 1

map = map<-- 无效。右侧应该是一个 sql 值(带引号的字符串、数字等)。也许map = 'map'(引用值)是预期的结果?

于 2012-08-26T01:44:53.540 回答
0

您看到的问题已经出现,因为您的字符串文字都没有被引用,因此值中的逗号$transport被评估为 SQLSET子句之间的分隔符,因此会导致您看到的语法错误。

你应该引用你的字符串文字——或者更好的是,使用参数化的语句,这样你的变量就不会被 SQL 评估(这避免了所有形式的 SQL 注入攻击)。

于 2012-08-26T01:51:52.730 回答