Я довольно новичок в PHP, так что извините, если звучит такая легкая проблема … 🙂
У меня появляется сообщение об ошибке при вставке содержимого, содержащего кавычки в мой db. вот что я пытался избежать цитат, но не работал:
$con = mysql_connect("localhost","xxxx","xxxxx"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("test", $con); $nowdate = date('dm-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')";
запятая не должна быть в конце запроса