Auto_incremented int hedefleme php ile MySQL kayıt silinsin mi?

4 Cevap php

Neden bu bütün kaydı silmek için çalışmalarını silmez:

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

Nerede indeks MySQL auto_incremented, int türünde bir değişkendir?

4 Cevap

Your question php is related, not mysql.
print $query; and see.
then refer to php strings syntax, http://php.net/types.string for the proper syntax.

Ayrıca, sorguya gider bir değişken, düzgün hazırlanmış olmalı, kaçtı, ya da, bir tamsayı değeri durumunda, elle bu tip döküm

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

ya da, bu tek satır yapmak için,

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

Ayrıca, indeks, sen ters tırnakların ile kaçabilir, çok sorunlara neden olabilir ayrılmış kelime

`index`

Eğer sadece id yeniden adlandırırsanız, ama çok daha iyi olacak

Sen ayrı bir sorgu ile silme başarı için test etmelidir

$query = 'DELETE FROM tblEvents WHERE index = $_GET["id"]';
mysql_query($query, $db);
if( mysql_affected_rows < 1 ) die();

Albay Shrapnel doğru, tek tırnak bir dize değişkenleri doğrudan kullanamazsınız. Eğer sorgu çift tırnak kullanırsanız, bu iş olacak.

EDIT: Albay şarapnel yaptığı açıklamada söylediği gibi, bu durumda da tek tırnak ofset dizideki çift tırnak değiştirmeniz gerekecek.

Umarım zaten bunu biliyorum, ama insanlar SQL Injection yapamaz böylece $_GET['id'] güvenli gerekir. Yerine aşağıdaki kullanmayı deneyin:

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

Bu da tek tırnak yerine çift tırnak içinde bir değişken kullanmak sorunu çözer.

İsterseniz siz de yapabilirsiniz:

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

Bu da çalışır.