AND is a logical operator that returns true iff tüm argümanları doğrudur. Eğer bir sonucu birden fazla sütunu olan bahsediyoruz, sadece virgülle ayırın:
SELECT COUNT(id), power
FROM table
WHERE ...
Ancak, power functionally dependent id üzerinde değil ve birden fazla satır ile varsa bir id, herhangi alabilir verildi power değerlerinin (MySQL dışındaki DBMSs, sen bile çalışmak sorgu için GROUP BY iktidara gerekir).
Bunun yerine PHP teklik dayatmanın, bir UNIQUE indeksi on column username. Column id bu eşsiz ima birincil anahtar olmalıdır beyan ederim.
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(64) UNIQUE NOT NULL,
...
);
Veya, tablo zaten varsa,
CREATE UNIQUE INDEX username ON users (username);
Off Topic
UPPER sütun username arayarak, MySQL sorguyu yürütmek için tüm tabloyu taramak zorunda neden, kullanılan herhangi bir dizin önlenmesi ediyoruz. Eğer kullanıcı adları harf duyarsız olmasını istiyorsanız, onları saklamadan önce çevirebiliriz. Bu kolayca MySQL başvuru kılavuzunda okuyabilirsiniz ki, triggers ile gerçekleştirilir.
delimiter ;;
CREATE TRIGGER upcase_username_insert
BEFORE INSERT
ON TABLE users
FOR EACH ROW
NEW.username=UPPER(NEW.username)
END;;
CREATE TRIGGER upcase_username_update
BEFORE UPDATE
ON TABLE users
FOR EACH ROW
NEW.username=UPPER(NEW.username)
END;;
delimiter ;
Dizeleri iyi çalışacaktır birleştirmek için sprintf kullanırken, standart bir uygulama değil. Değişkenler interpolated, çift tırnaklı dizge içine, böylece sadece yazabilirsiniz "SELECT ... WHERE ".
Eğer hashed and salted passwords yerine düz şifreler daha (MD5 olmayan bir kriptografik olarak güvenli karma, bu gün kullanmakta) depolamak emin olun.
Son olarak, ama en önemlisi, sorgu yansıtılmadan değerler gelen ve ne diğer işleme onlara yapılan yere göre, sizin sorgu SQL injection karşı savunmasız olabilir. (Hazır deyim parametreler SQL enjeksiyon yenilmez olan) yerine PDO ve prepared statements kullanın. Oku "Writing MySQL Scripts with PHP and PDO" bir PDO öğretici.