Gerçek bir kaçış dize döngü birden çok değişken MySQL

4 Cevap php

Ben isim, adres, şehir, eyalet, posta değerler $ isim, $ adres vb eklemek istiyorsanız söyleyin ....

Nasıl takmadan önce değişkenlerin her biri üzerine mysql_real_escape_string çalıştırabilirsiniz. Orada bir foreach veya döngü olmak var ya da var yerine, her bir değişken hakkı dışarı yazma yöntemi ise?

Yardımlarınız için teşekkürler.

Tom

bu yüzden varsa

 $data = array($address, $city, $name);
 array_map('mysql_real_escape_string', $data);

ve

$columns = "name, address, city, state, zip";
$count = $dbh->exec("INSERT INTO customer($columns) VALUES ($data)");

Ben hataları bir ton olsun.

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'root'@'localhost' (using password: NO) in /Users/tommyscott45/Sites/experiment/result.php on line 23

Şimdi ne olacak?

4 Cevap

mysql_real_escape_string çağırmaya çalışırken bir veritabanı hatası oluştu ve ben sorguyu yürütmek için $dbh->exec() kullandığınızı görüyoruz. Bu PDO ile veritabanına bağlanmak önerir, böylece yerine kullanmak gerekir PDO::quote yerine mysql_real_escape_string.

Diğerleri zaten söylediğim gibi Ayrıca, sorunu çözmek için daha iyi bir yolu hazır deyimleri ve PDO::prepare kullanmak olacaktır.

Sen sprintf'i kullanabilirsiniz.

Örneğin

$query = sprintf("INSERT into 
                  TABLE name = '%s', address = '%s', city = '%s'",
                 mysqli_escape_string($link, $name), 
                 mysqli_escape_string($link, $address), 
                 mysqli_escape_string($link, $city) );

Veya tam aradığınız değil ne olduğunu; tekrar ve tekrar "mysqli_escape_string" yazarak önlemek için bir yol.

Bu çalışması gerekir.

$data = array($address, $city, $name);
array_map('mysql_real_escape_string', $data);

Ama gerçekten artık mysql uzantısı kullanmak gerekir. Bir PDO veya mysqli bakmak ve "hazırlanmış deyimleri" için destek var.

Çeşitli sorunlar var.

Öncelikle bunu yerinde dönüşüm yapmaz gibi bir değişkene array_map() çıkışını atamak gerekir olmasıdır. Sonra bir dizeye geri patlamaya gerekir.

 $data = "'".implode("', '", array_map('mysql_real_escape_string', $data))."'";

Büyük sorun Elinizde yerine siz doğru alıntı ile, doğru bir SQL deyimini monte saklamak istediğiniz hakkında bilgisini kaydetmek ve kullanmak isteyen konum bilgilerini alacak bir veri erişim katmanı kullanarak SQL montaj konum olduğunu ve hepsi.

Bu aynı zamanda tesadüfen hazır deyimleri kullanmaya önerilerin arkasında itici güç olduğunu, ancak yine de SQL ifadeleri montaj olurdu çünkü sadece hazırlanmış deyimleri kullanarak çözümün sadece yarısıdır.