-2

このサイトが大好きです。私は mysql と php を学んで、デザインと iPhone メッセージング クライアントを支援しています (娯楽目的で、アプリ ストアに公開していません)。

テーブル内の特定のアイテムを更新しようとして問題が発生しています。基本的に、ユーザーがメッセージを読んだらメッセージを既読としてマークしようとしていますが、エラーが発生しています

エラーメッセージ:

データを更新できませんでした: SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルを参照して、1 行目の「read='MAYBE' WHERE id='19'' 付近で使用する正しい構文を確認してください。

GET を送信する URL の例を次に示します。これにより、row/id # 19 が検出され、READ が YES としてマークされるため、以前は NO に設定されていたため、読み取られました。

 http://myawesomesite.com/markasread.php?idnumber=19&readmessage=MAYBE

これが私のコードです:

<?php
$useridnumber = $_GET['idnumber'];
$didread = $_GET['readmessage'];

$conn = mysql_connect("sqlurl.com","sqllogin","sqlpassword");
if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydatabase');
$sql = ("UPDATE messages SET read='$didread' WHERE id='$useridnumber'");


$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not update data: ' . mysql_error());
}
echo "Updated data successfully\n";
mysql_close($conn);
?>

ログイン情報が同じphpとsqlインジェクションにあることは理解していますが、このアプリはプライベートチャット用に2人だけ専用であるため、この時点でセキュリティ上の懸念に実際に対処する必要はないと考えました.... :-)

4

1 に答える 1

4

readは mysql の予約語です - ドキュメント: http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

バッククォートを使用してエスケープする必要があります - `. ()また、 を囲む括弧$sqlは不要なので削除します。

$sql = "UPDATE `messages` SET `read`='$didread' WHERE `id`='$useridnumber'";
于 2013-04-03T16:54:51.570 に答える