Я довольно плохо знаком с 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
он должен работать без sprintf.
$title = mysql_real_escape_string($_POST[title]);
$body = mysql_real_escape_string($_POST[body]);
Начните использовать подготовленные параметризованные операторы. Они устраняют необходимость в каких-либо проблемах с выходом из 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);
При любом запросе к базе данных, особенно при вставке из веб-приложения, вы действительно должны использовать параметры. См. Здесь справку по PHP о том, как использовать параметры в ваших запросах: Параметры PHP
Это поможет предотвратить атаки SQL-инъекций, а также избавит вас от необходимости экранировать символы.
Ваш код
$sql="INSERT INTO articles (title, body, date) VALUES ('$title','$body','$nowdate'),";
должен выглядеть следующим образом
$sql="INSERT INTO articles (title, body, date) VALUES ('$title','$body','$nowdate')";
запятой не должно быть в конце запроса