سؤال

يمكن أن يخبرني البعض إذا كان هناك وظيفة تعمل نفسها مثل PHP mysql_real_escape_string() ل perl من DBI. وحدة؟

هل كانت مفيدة؟

المحلول

يجب عليك استخدامها العناصر النائبة وقيم الربط.

نصائح أخرى

لا. هرب. SQL.

لا. اقتبس. SQL.

استخدم SQL للناصرين / المعلمات (?). يتم إرسال هيكل عبارة SQL وقيم البيانات التي تمثلها العناصر النائبة إلى قاعدة البيانات بشكل منفصل تماما، لذلك (يحظر علة في محرك قاعدة البيانات أو وحدة DBD) لا توجد طريقة تماما يمكن تفسير قيم البيانات بأنها SQL أوامر.

my $name = "Robert'); DROP TABLE Students; --";
my $sth = $dbh->prepare('SELECT id, age FROM Students WHERE name = ?');
$sth->execute($name);  # Finds Little Bobby Tables without harming the db

كمنفعة جانبية، فإن استخدام العناصر النائبة هي أيضا أكثر كفاءة إذا قمت بإعادة استخدام عبارة SQL الخاصة بك (يجب إعدادها مرة واحدة فقط) ولا تقل عنها إذا لم تكن (إذا كنت لا تتصل بالتحضير صراحة، فلا يزال يحصل دعا ضمنيا قبل تنفيذ الاستعلام).

يحب اقتبس?

أود أيضا أن أوصي بقراءة الوثائق ل DBD :: MySQL. إذا كنت قلقا بشأن UTF8.

من http://www.stonehenge.com/merlyn/unixreview/col58.html. :

 استخدام SQL :: الملخص؛ ... لي $ SQA = SQL :: مجردة-> جديد؛ بلدي ($ المالك، $ account_type) =_؛ # من المدخلات الخاصة بي ($ SQL، Bind) = $ sqa-> حدد ('account_data'، # الجدول # [QW (رصيد الحساب)]، # الحقول {account_owner => $ المالك، account_type => $ account_type}، # " أين" )؛ بلدي $ sth = $ dbh-> prepare_cached ($ sql)؛ # إعادة استخدام SQL إذا استطعنا $ sth-> تنفيذ (bind)؛ # تنفيذها لهذا الاستعلام

طريقة مقبض قاعدة البيانات "Quote"

my $dbh = DBI->connect( ... );
$sql = sprintf "SELECT foo FROM bar WHERE baz = %s",
          $dbh->quote("Don't");

http://metacpan.org/pod/dbi#quote.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top