mysql_real_escape_string()
और sql इंजेक्शन
पहले ही उल्लेख किया जा चुका है।
लेकिन अभी आपकी स्क्रिप्ट (कड़ी मेहनत से) को डेटा/पैरामीटर के साथ sql स्टेटमेंट को मिलाना है और अगले चरण में MySQL सर्वर को स्टेटमेंट से डेटा को अलग करना होगा।
का उपयोग करना (सर्वर-साइड) तैयार विवरण
आपकी क्वेरी के दोनों "भाग" अलग-अलग भेजे जाते हैं और एसक्यूएल पार्सर (आपके MySQL सर्वर का) कभी भी "भ्रमित" नहीं हो सकता है जहां कथन समाप्त होता है और डेटा शुरू होता है।
php-mysql मॉड्यूल तैयार बयान नहीं जानता लेकिन php-mysqli और PDO करो।
$pdo = new PDO('mysql:host=localhost;dbname=test', '...', '...');
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$stmt = $pdo->prepare('
UPDATE
Videos
SET
Title=:title ,
Preacher=:preacher ,
Date=:date ,
Service=:service ,
File=:file ,
Description=:description
WHERE
id=:id
');
$stmt->bindParam(':title', $_POST['title']);
$stmt->bindParam(':preacher', $_POST['preacher']);
$stmt->bindParam(':date', $_POST['date']);
$stmt->bindParam(':service', $_POST['service']);
$stmt->bindParam(':file', $_POST['file']);
$stmt->bindParam(':description', $_POST['description']);
$stmt->bindParam(':id', $_GET['id']); // really _GET?
$stmt->execute();
यदि आप केवल एक ऑपरेशन के लिए $stmt का उपयोग करते हैं तो बहुत अधिक ब्लोट लग सकता है। लेकिन विचार करें कि अन्यथा आपको प्रत्येक पैरामीटर के लिए mysql_real_escape_string() को कॉल करना होगा।