Sepertinya Mark Baker sudah menjawab pertanyaan Anda, tetapi saya ingin menambahkan beberapa tips yang telah banyak membantu saya.
PDO Tidak Membutuhkan mysql_escape_string
Selama semua yang masuk ke kueri Anda yang berhubungan dengan input pengguna menggunakan pernyataan yang disiapkan (seperti Anda di atas), Anda tidak perlu keluar dari input dengan mysql_real_escape_string
[1].
// Don't worry about SQL injection since all of the user
// defined inputs are being escaped by the PDO package
$sql = "INSERT INTO "
. "`users` "
. "SET "
. "`name` = :name";
$query = $pdo->prepare($sql);
$query->bindParam(':name', $name);
$query->execute();
Namun perlu diketahui bahwa injeksi SQL masih dimungkinkan jika Anda tidak mengikat input pengguna:
// SQL injection can totally happen here
$sql = "INSERT INTO "
. "`users` "
. "SET "
. "`name` = $name";
$query = $pdo->prepare($sql);
$query->execute();
[1] http://www.php.net/manual/ en/pdo.prepared-statements.php
Cobalah Membuat SQL Anda Sependek Mungkin
Untuk pernyataan SQL sederhana, semakin pendek, semakin mudah untuk mempertahankan dan Anda cenderung membuat kesalahan. Anda dapat menggunakan sintaks INSERT alternatif [2]:
INSERT INTO
`users`
SET
`name` = 'Steve';
setara dengan:
INSERT INTO
`users`
(
`name`
)
VALUES
(
'Steve'
);
Itu berarti untuk pernyataan besar seperti milik Anda, Anda dapat secara efektif setengah ukurannya karena Anda tidak perlu mengulang semua nama kolom:
$sql = "INSERT INTO "
. "`records_rec` "
. "SET "
. "`oldid_rec` = :oldid_rec, "
. "`firstname_rec` = :firstname_rec, "
. "`artist_rec` = :artist_rec, "
. "`aside_rec` = :aside_rec, "
. "`bside_rec` = :bside_rec, "
. "`label_rec` = :label_rec, "
. "`condition_rec` = :condition_rec, "
. "`genere_rec` = :genere_rec, "
. "`price_rec` = :price_rec, "
. "`collection_rec` = :collection_rec, "
. "`active_rec` = :active_rec, "
. "`info_rec` = :info_rec, "
. "`notes_rec` = :notes_rec, "
. "`order_rec` = :order_rec, "
. "`alabelimage_rec` = :alabelimage_rec, "
. "`blabelimage_rec` = :blabelimage_rec, "
. "`asound_rec` = :asound_rec, "
. "`bsound_rec` = :bsound_rec, "
. "`featured_rec` = :featured_rec, "
. "`format_rec` = :format_rec";
$dbh = new PDO(<info goes here>);
$stmt = $dbh->prepare($sql);
// Bind your params here...
[2] http://dev.mysql.com/doc/ refman/5.5/en/insert.html
Buat Pernyataan SQL Anda Multi-baris dan Cantik
Saya mulai memformat pernyataan SQL saya menjadi multi-baris (seperti di atas) dan sejak itu saya memiliki JAUH lebih sedikit kesalahan seperti ini. Itu memang memakan banyak ruang, tetapi saya pikir pada akhirnya itu sepadan. Dengan membuat semuanya berbaris, itu membuat kesalahan menonjol seperti jempol yang sakit.
Selamat membuat kode!