1

このページを使用して、ユーザーがニュースレターを更新したか、新しいニュースレターを作成したかを確認したいと思います。データベースに問題なく接続して更新されますが、次のエラーが発生するため、新しいデータベースを挿入することはできません。

エラー:SQL構文にエラーがあります。1行目の''の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

ifステートメントを削除して、新しいレコードを挿入するように強制すると、問題なく機能します。

アドバイスをいただければ幸いです。ありがとうございます。

<?php
$server = "localhost";
$username = "user";
$password = "****";
$database = "test";

$con = mysql_connect($server, $username, $password);

$title = $_POST["title"];
$body = $_POST["body"];
$transaction = "Record Added";

if (!$con)
{
    die('Could not connect: ' . mysql_error());
}

mysql_select_db($database, $con);

if(isset($_POST["id"]))
{
    $sql = "INSERT INTO newsletter (date, title, body)
    VALUES('1990-12-12', '$title', '$body')";       
}
else
{
    $id = $_POST["id"];
    $transaction = "Record Updated";
    $sql = "UPDATE newsletter SET title='".$title."', body='".$body."' WHERE newsletterId =".$id;   
}

if (!mysql_query($sql,$con))
{
    die('Error: ' . mysql_error());
}

echo $transaction;

mysql_close($con);
?>
4

2 に答える 2

3

ロジックに欠陥があるようです。IDが投稿されている場合は挿入しようとし、IDが投稿されていない場合は更新しようとします。

if(isset($_POST["id"]))
{
    $id = $_POST["id"];
    $transaction = "Record Updated";
    $sql = "UPDATE newsletter SET title='".$title."', body='".$body."' WHERE newsletterId =".$id;        
}
else
{
    $sql = "INSERT INTO newsletter (date, title, body)
    VALUES('1990-12-12', '$title', '$body')";   
}

それがあなたのエラーの原因であり、あなた$idは空です。

それとは別に、SQLインジェクションを調べる必要があります。プリペアドステートメントに切り替えるのが最善の方法です。

于 2012-04-18T18:31:49.650 に答える
0

クエリを適切に引用します

$sql = "UPDATE newsletter SET title='".$title."', body='".$body."' WHERE newsletterId ='$id'";
于 2012-04-18T18:35:24.177 に答える