0

この削除でレコード全体が削除されないのはなぜですか。

$query = 'DELETE FROM tblEvents WHERE index = $_GET["id"]';
$result = mysql_query($query, $db) or die(mysql_error($db));

インデックスはMySQLでauto_incrementedのint型変数のどこにありますか?

4

4 に答える 4

4

あなたの質問phpは、mysqlではなく関連しています。
print $query;そして見てください。適切な構文については、 http://php.net/types.string
を参照してください。

また、クエリに送られる変数は、適切に準備するか、エスケープするか、整数値の場合は手動でこの型にキャストする必要があります。

$id=intval($_GET["id"]);

または、1行にするために、

$query = 'DELETE FROM tblEvents WHERE `index` = '.intval($_GET["id"]);

また、インデックスも問題を引き起こす可能性のある予約語です。バッククォートでエスケープできます。

`index`

しかし、名前を変更すると、はるかに良くなりますid

于 2010-03-15T13:41:36.323 に答える
1

別のクエリで削除の成功をテストする必要があります

$query = 'DELETE FROM tblEvents WHERE index = $_GET["id"]';
mysql_query($query, $db);
if( mysql_affected_rows < 1 ) die();
于 2010-03-15T13:46:25.007 に答える
0

Col. Shrapnel の言うとおりです。一重引用符で囲まれた文字列内で変数を直接使用することはできません。クエリを二重引用符で囲むと、機能します。

編集: シュラプネル大佐がコメントで述べたように、この場合、配列オフセットの二重引用符を単一引用符に変更する必要もあります。

于 2010-03-15T13:44:54.643 に答える
-1

うまくいけば、すでにこれを知っていると思いますが$_GET['id']、人々が SQL インジェクションを実行できないようにセキュリティを確保する必要があります。代わりに以下を使用してみてください。

$query = sprintf('DELETE FROM tblEvents WHERE index = %d',mysql_real_escape_string($_GET['id']));

これにより、二重引用符の代わりに単一引用符で変数を使用するという問題も解決されます。

必要に応じて、次のこともできます。

$id = mysql_real_escape_string($_GET['id']);
$query = "DELETE FROM tblEvents WHERE index = {$id}";

これも機能します。

于 2010-03-15T13:47:04.110 に答える