PHP veritabanına eklerken nasıl tırnak kaçış

4 Cevap php

Ben çok üzgünüm PHP oldukça yeni yaşıyorum sesler böyle kolay bir sorun ... :)

I'm having an error message when inserting content which contains quotes into my db. here's what I tried trying to escape the quotes but didn't work:

$con = mysql_connect("localhost","xxxx","xxxxx");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("test", $con);

$nowdate = date('d-m-Y')

$title =  sprintf($_POST[title], mysql_real_escape_string($_POST[title]));

$body = sprintf($_POST[body], mysql_real_escape_string($_POST[body]));

$sql="INSERT INTO articles (title, body, date) VALUES ('$title','$body','$nowdate'),";

if (!mysql_query($sql,$con))
  {

die('Error: ' . mysql_error());

}

header('Location: index.php');

Herhangi bir çözüm sağlayabilir miyim?

Şimdiden teşekkürler.

Mauro

4 Cevap

Bu sprintf şeyler olmadan çalışması gerekir

$title = mysql_real_escape_string($_POST[title]);
$body = mysql_real_escape_string($_POST[body]);

Hazırlanan parametreli deyimleri kullanarak başlayın. Onlar sıkıntılardan kaçan herhangi bir SQL için gereksinimini ortadan kaldırır ve dize birleştirilmiş SQL ifadeleri açık bırakmak SQL enjeksiyon boşluğu kapatmak. Bir döngü kullanıldığında artı onlar çok daha hoş çalışmak ve daha hızlıdır.

$con  = new mysqli("localhost", "u", "p", "test");
if (mysqli_connect_errno()) die(mysqli_connect_error());

$sql  = "INSERT INTO articles (title, body, date) VALUES (?, ?, NOW())";
$stmt = $con->prepare($sql);
$ok   = $stmt->bind_param("ss", $_POST[title], $_POST[body]);

if ($ok && $stmt->execute())
  header('Location: index.php');
else
  die('Error: '.$con->error);

Herhangi bir veritabanı sorgu ile, özellikle web tabanlı bir uygulama ekler, gerçekten parametreler kullanılarak yapılmalıdır. Sorgularda parametrelerin nasıl kullanılacağı üzerinde PHP yardım için buraya bakınız: PHP parameters

Bu, SQL enjeksiyon saldırıları önlemek yanı sıra karakterler kaçmak zorunda sizi önlemeye yardımcı olacaktır.

Sizin kod

$sql="INSERT INTO articles (title, body, date) VALUES ('$title','$body','$nowdate'),";

aşağıdaki gibi olmalıdır

$sql="INSERT INTO articles (title, body, date) VALUES ('$title','$body','$nowdate')";

virgül sorgunun sonunda orada olmamalı