नीचे दी गई पंक्तियों को ध्यान में रखते हुए mysql_real_escape_string()ए> मैनुअल:
MySQL में SQL इंजेक्शन अकेले इन विशेष वर्णों के साथ संभव नहीं होना चाहिए:\b
\0
\n
\r
\t
\Z
।
हालाँकि स्ट्रिंग लिटरल्स मैनुअल निम्नलिखित बताता है लेकिन निर्दिष्ट कारण (या नहीं) SQL इंजेक्शन से संबंधित नहीं हैं:
इसके अलावा, एक साधारण परीक्षण में, मौसम की परवाह किए बिना उपरोक्त सूचीबद्ध विशेष वर्ण बच गए हैं या नहीं, MySQL ने समान परिणाम प्राप्त किए। दूसरे शब्दों में MySQL ने भी बुरा नहीं माना:
$query_sql = "SELECT * FROM `user` WHERE user = '$user'";
उपरोक्त क्वेरी ने उन उपरोक्त सूचीबद्ध वर्णों के गैर-एस्केप्ड और एस्केप्ड संस्करणों के लिए समान रूप से काम किया जैसा कि नीचे रखा गया है:
$user = chr(8); // Back Space
$user = chr(0); // Null char
$user = chr(13); // Carriage Return
$user = chr(9); // Horizontal Tab
$user = chr(26); // Substitute
$user = chr(92) .chr(8); // Escaped Back Space
$user = chr(92) .chr(0); // Escaped Null char
$user = chr(92) .chr(13); // Escaped Carriage Return
$user = chr(92) .chr(9); // Escaped Horizontal Tab
$user = chr(92) .chr(26); // Escaped Substitute
परीक्षण तालिका और साधारण परीक्षण में प्रयुक्त डेटा:
-- Table Structure
CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user` varchar(10) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Table Data
INSERT INTO `user` ( `user` ) VALUES
( char( '8' ) ),
( char( '0' ) ),
( char( '10' ) ),
( char( '13' ) ),
( char( '9' ) ),
( char( '26' ) );