2016-03-23 36 views
0

• Kodlama alışkanlıklarını değiştirmeye çalışıyorum ve en azından SQL Enjeksiyonlarını önlemek istiyorum. Bununla birlikte, hala bir sorgu oluştururken parametreler veya sözdizimi hakkında kafa karıştırıyorum. Örneğin,PDO kullanarak değerler ekleme

$q = //LINE 1 "insert into tblProject(projectName, projectLocation, projectType, projectStatus) //LINE 2 values(:projectName, :projectLocation, :projectType, :projectStatus);";

Ben ilk satırı, ne 'LINE 2 yılında ise veritabanındaki sütun adı ile ilişkili olduğuna inanıyoruz:" aracı ve ne yapar values() içindeki değerleri yapar Nerede ? referanslar mu o, örneğin, ben ilan değişkene $projectName = $_POST['projectName']; atıfta o başka soru en örnek olarak bu kodu kullanalım tüm bu ...->execute(array(...)); hakkındadır • $ ProjeAdı veya $_POST['projectName']

içindeki değere bakın mu.?:

$results = $query->execute(array(
":projectName"  => $projectName, 
":projectLocation" => $projectLocation, 
":projectType"  => $projectType, 
":projectStatus" => $projectStatus 
)); 

Kısaca açıklayabilir misiniz ama ne yapar? Ve ayrıca, nerede :projectName ve benzeri .. Nereden geldi veya nereden kaynaklanıyor?

• Bir dizi kullanır(). Bu nedenle, yalnızca tek bir değeri güncelleştirip eklemek ve execute(array()) kullanıyor olsaydım, bu bana herhangi bir hata verir mi?

Çok fazla soru soruyorum, burada cevapların çoğunu bulabileceğim iyi referanslar var mı?

Şimdiden teşekkürler.

+2

PDO ile hem adlandırılmış': someName 'hem de adlandırılmamış '' 'yer tutucuları kullanabilirsiniz. Bunlar basitçe yürütmeye geçirdiğiniz değerlerle değiştirilecektir. Daha fazla bilgiyi şu belgede okuyabilirsiniz: http://php.net/manual/en/pdo.prepare.php – JimL

cevap

2

Sorunuzun iki bölümü aynıdır. Colonları olan adlar, bağlamanızın adını nasıl belirlediğinizdir. BindValue/bindParam'ı kullandığınızda veya çalıştırdığınızda, "this: parametre aslında bu değer" diyorsunuz. Bu konuda çalıştırmak Sonra

$q = "insert into tblProject(projectName, projectLocation, projectType, projectStatus) 
    values(:projectName, :projectLocation, :projectType, :projectStatus);"; 

: Yani Sorgunuzla alacak

$results = $query->execute(array(
":projectName"  => $projectName, 
":projectLocation" => $projectLocation, 
":projectType"  => $projectType, 
":projectStatus" => $projectStatus 
)); 

sürücü geçeceği ve Tamam" demek, bu yüzden $ ProjectName değeri kaçmış gerekiyor ve yerine kullanılır: projectName sorgusunda ve $ projectLocation olmalıdır: projectLocation ... "ve benzeri

+0

Oh. Kolonlu isimler nereden geldi? 'veya başka bir yer adı mı? – Jerlon

+0

@ user4932301 istediğin her şeyi onlara adlandırabilirsin. Buradaki nokta, adlandırılmış yer tutucularla, sorguda sahip olduğunuz adın, yürütme adına iletilen adlarla eşleşmesidir. Adsız yer tutucuları ile siparişe göre eşleştirilecektir. – JimL

+0

@ user4932301 sadece bunları yazdınız. Onlara ne istediğinizi (http://stackoverflow.com/a/5810058/4333555 dahilinde), ör. ': dumbplaceholder1' sonra yürütme (dizi ( ": dumbplaceholder1 "=>' – chris85

İlgili konular