2012-06-04 22 views
5

Bazen boş veya boş değerlere sahip dizilerim var. MySql'de null olmayan olarak ayarlanırlar, ancak varsayılan değerler atanır. O zaman neden MySql bana bir hata veriyor, ör. Column user_type can not be null. (Sıkı modda koşmuyorum).Bu PHP/mysql insert ifadesindeki boş değerleri nasıl ele alınır

Sorguyu hazırlarken bazı değerler yerine DEFAULT anahtar sözcüğünü kullanabileceğimin farkındayım, ancak bunu gerçekten yapmak istemiyorum. Ben kelimesi kelimesine benim SQL ifadelerini yazma yerine Örneğin vb foreach döngüsünden ile birlikte koymak edebilmek istiyorum, ben kullanmak istiyorum "INSERT INTO users (user_type, first_name, last_name, password) VALUES (:user_type, :first_name, :last_name, :password)";

Bildiğim kadarıyla Hatırımda gibi bu ince (yani ikame çalışıyordu Kullanıma geçene kadar doğru varsayılan değerler) Ben parametreleri gibi değerleri kabul eden bir işlevi yaratacak

Teşekkür ...

+0

Ben bunun bu şekilde yapılabilir sanmıyorum: Nasıl aşağıdaki ilgili. Böylece MySQL varsayılan değeri uygulayamaz - çünkü bir değer * belirtildi *. Tetikleyiciler var ama "ick!" Bir "çözüm" demek, bir Harita'ya dayanan minimal bir sorgu-jeneratöre sahip olmaktır. (Hala yer tutucuları kullanarak.) –

+0

Php hakkında mı konuşuyorsunuz? "Array" hakkında bahsettiğiniz için, muhtemelen Array 'in –

+0

hangi dilde olduğunu anmaya değmekteyim (aynı tip yapıya sahip * işaretleyicilerle çalışmanın * olduğunu * düşünmüyorum; iş, sihirle bakın.) –

cevap

1

... adlandırılmış parametrelere işaretçileri sorgulamak. İlişkilendirici bir dizide varsayılan değerler olacaktır. Parametrelerden herhangi birinin değeri boşsa, varsayılan değerle değiştirilir.

örn

function setUpQuery($user_type_in, $first_name_in, $last_name_in, $password_in){ 
     $default_values('user_type' => 'Admin', 'first_name' => 'John', 'last_name' => 'Doe', 'password' => 'XXX'); 
     $user_type = ($user_type_in == NULL)? $default_values['user_type']:$user_type_in; 
     ..... 
     return "INSERT INTO users (user_type, first_name, last_name, password) VALUES ('$user_type', '$first_name', '$last_name', '$password');" 
} 

İyi Noktası. Hatta NULL` `eğer bağlı iken (görünüp görünmeyeceğini çünkü!) * * gönderiliyor değeri:

INSERT INTO users(user_type, first_name, last_name,password) values 
(ifnull('$user_type',default(user_type)), ifnull('$first_name', default(first_name)), 
ifnull('$last_name',default(last_name)), ifnull('$password', default(password)); 
+0

Bu sahip DB varsayılan değerlerini kullanmamanın ciddi dezavantajı. –

+0

@hgolov, SQL deyimlerini (ve PDO muadilleri) statik olarak oluşturmayı ve dinamik olarak değil, hiyerarşik bir eşleştirici sınıfının statik üyeleri olduklarını umuyordum. "If! Isset ($ this -> _ PDOInsert)" gibi bir denetim yapıyorum {...} Varsayılan() işlev yaklaşımı işe yaramaz çünkü sorgunun parametre türleri her kullanımda değişir ve yalnızca bir kez statik üye ayarlanmıştır. –

+0

Bunu çözdüğünüz gibi işaretlediğinizi görüyorum. – hgolov

İlgili konular