1

現在、データベース テーブルの行を一度に 1 つずつ単純に更新するコードに取り組んでいます。ただし、奇数行のみが更新され、偶数行は更新されません。

これが私のPHPです:

<?php
require_once ("connect.php");
$id = $_GET['id'];
$title = $_POST['title'];
$description = $_POST['description'];

$query = "UPDATE tbl_shows SET shows_title='$title', shows_description='$description' WHERE shows_id='$id'";
$result = mysql_query($query);

 if ($result) {
    header ("Location: shows.php?=success");
    exit ();
} else {
    echo "<p>Still doesn't work</p>";
        exit ();
}
?>

$id、$title、および $description 変数を出力したところ、すべて正常に表示されました。

偶数行と奇数行の両方が更新されるようにコードを変更するにはどうすればよいですか。

編集:

$id、$title、$description、および $query をエコーすると、奇数行と偶数行の両方で同じ結果が表示されます。

mysql_error() が出力するもの:

SQL 構文にエラーがあります。使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください (行のデータの一部がここに表示され、エラーが省略されます) WHE' at line 1

クエリ:

UPDATE tbl_shows SET shows_title='Title is here', shows_description='Description is here' WHERE shows_id='2'
4

2 に答える 2

1

あなたのコードには簡単な SQL インジェクションの脆弱性があり、おそらく不注意なエラーが発生しています。たとえば、 $description が次のようになっているとします。

Best movie ever!!! You're going to love it!

...その後、連結されたクエリは次のようになります。

UPDATE tbl_shows SET shows_title='Title is here', shows_description='Best movie ever!!! You're going to love it!' WHERE shows_id='2'

これに関する問題は、アポストロフィーがyou're原因で値show_descriptionが終了し、クエリの残りの部分が SQL にとって意味をなさないことです。

少なくとも、mysql_real_escape_string()を使用して、クエリに追加する変数をサニタイズします。さらに良いのは、php の PDO ライブラリを使用することです。

于 2012-05-17T16:35:32.910 に答える
0

偶数アイテムが投稿したものから更新されない原因はすぐにはわかりません。$result が false の場合に表示される正確なエラー メッセージを表示するには、 mysql_error関数を使用することをお勧めします。PHP ドキュメントによると、mysql_result はエラー時にのみ false を返すため、何か奇妙なことが起きている可能性があることを示しています。

于 2012-05-17T15:51:35.093 に答える