Autor Zpráva
HOl
Profil *
Ahoj, mám 2 tabulky. Uživatelů a uzivatele_aktivace (podle toho zda aktivovali mailem). Je to celé navržené blbě, nicméně s tím nic dělat nemohu. Potřebuji poradit s SQL dotazem. Potřebuji smazat řádek z uzivatele_aktivace a WHERE má být, že to platí, pokud se EMAIL z této tabulky rovná MAILU v tabulce uživatelů a UID v tabulce uživatelů se rovná zadanámu (v GET)

Snad jsem to vyjádřil dost jasně.
V podstatě
uzivatele_aktivace.email = uzivatele.email a
uzivatele.uid = $_GET['uid']

Mám toto, ale nemaže to. Ve strukturně psaném kódu bych si nechal vypsat chybu, popřípadě bych použil více dotazů, nicméně v OOP jsem začátečník.

$sql = $this->db->prepare("DELETE FROM `uzivatele_aktivace` WHERE `email` = `uzivatele.email` AND `uzivatele.uid` = :uid LIMIT 1");
Alphard
Profil
Takto jednoduše nejde napojit další tabulky, byl by třeba klasický postup jako u selectu, třeba join. Příklady různých možností jsou na stackoverflow.com/questions/652770/delete-with-join-in-mysql.
Myslím, že to ani není třeba komentovat, vám by tady mohl stačit jednoduchý poddotaz
delete from uzivatele_aktivace where email = (select email from uzivatele where ...)
HOl
Profil *
Děkuji. Nicméně zkusil jsem to podle odkazu a nic to nesmaže. Pokud to vložím do SQL v PHPMyAdminu, tak to funguje, jenže v kódu ne. Zde je celá třída.

public function smazatuzivatele($uid){
        $sql = $this->db->prepare("DELETE  FROM uzivatele_aktivace
WHERE   email IN (
            SELECT  email
            FROM    uzivatele
            WHERE   uid = :uid
        )");
        $sql = $this->db->prepare("DELETE FROM uzivatele WHERE uid = :uid LIMIT 1");        
        $sql->execute(array(':uid'=>$uid));
        
        return true;
        
    }

Jak jsem říkal, v OOP jsem začátečník, není například špatně zapsaná ta :uid?
HOl
Profil *
Nějak jsem to vyzkoušel, ale dostávám chyby
Warning: mysql_query(): Too many open links (0)
Warning: mysql_query(): A link to the server could not be established in

Jedná se ale o naprosto standardní kód

<?
include "../db_config.php";
$result = mysql_query("SELECT email FROM uzivatele WHERE id = ".(int)$_GET["idObject"]." LIMIT 1;") or die(mysql_error());
list($email) = mysql_fetch_row($result);
$sql = mysql_query("DELETE FROM uzivatele_aktivace WHERE email = '$email'") or die(mysql_error());
?>
Kajman
Profil
Zkuste pro připojení používat include_once místo include, ať se nepřipojujete zbytečně vícekrát.
HOl
Profil *
Dobře. Nicméně to problém nevyřešilo :/
Kajman
Profil
Podle hlášek to vypadá, že daný server dosahuje limitu pro počet připojení do databáze. Problém není v uvedeném kódu, zkuste kontaktovat podporu hostingu.
HOl
Profil *
Super, díky, navýšili limit.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: