Как избежать кавычек при вставке в базу данных с помощью PHP - PullRequest
8 голосов
/ 07 апреля 2010

Я довольно новичок в PHP, извините, если звучит такая легкая проблема ...:)

У меня появляется сообщение об ошибке при вставке содержимого, содержащего кавычки, в мою базу данных. вот что я пытался избежать кавычек, но не получилось:

$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');

Не могли бы вы предоставить какое-либо решение, пожалуйста?

Заранее спасибо.

Mauro

Ответы [ 4 ]

13 голосов
/ 07 апреля 2010

Пожалуйста, начните использовать подготовленные параметризованные операторы.Они устраняют необходимость в любых проблемах с выходом SQL и закрывают лазейку для SQL-инъекций, которую операторы SQL с конкатенацией строк оставляют открытыми.Кроме того, с ними гораздо приятнее работать и гораздо быстрее, когда они используются в цикле.

$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);
12 голосов
/ 07 апреля 2010

это должно работать без вещей sprintf

$title = mysql_real_escape_string($_POST[title]);
$body = mysql_real_escape_string($_POST[body]);
2 голосов
/ 07 апреля 2010

Ваш код

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

должен выглядеть следующим образом

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

запятая не должна быть в конце запроса

2 голосов
/ 07 апреля 2010

При любом запросе к базе данных, особенно при вставке из веб-приложения, вам действительно следует использовать параметры. Для получения справки об использовании параметров в ваших запросах см. Здесь: Параметры PHP

Это поможет предотвратить атаки с использованием SQL-инъекций, а также избавит вас от необходимости экранировать символы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...