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 構文にエラーがあります。near ' を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

map= map WHERE place_id = 54' at line 1

4

3 に答える 3

2

そのコードのエラーは、変数の周りに引用符を追加しないことです。次のようにする必要があります。

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

ただし、エラーをデバッグでき、SQL インジェクションを心配する必要がないため、トランザクションで PDO を使用してみてください。

これを試してください: (エラーが表示され、問題があればロールバックされます)

$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

表示されている問題は、文字列リテラルが引用されていないために発生したため、値のコンマが$transportSQLSET句間の区切り記号として評価され、構文エラーが発生します。

文字列リテラルを引用符で囲む必要があります。または、パラメーター化されたステートメントを使用して、変数が SQL に対してまったく評価されないようにすることをお勧めします (これにより、あらゆる形式の SQL インジェクション攻撃を回避できます)。

于 2012-08-26T01:51:52.730 に答える