Я только что реализовал mysql_real_escape_string(), и теперь мой script не будет записывать в БД. Все было отлично, прежде чем добавить mysql_real_escape_string():
Любые идеи?
$name = mysql_real_escape_string($_POST['name']);
$description = mysql_real_escape_string($_POST['description']);
$custid = mysql_real_escape_string($_SESSION['customerid']);
mysql_send("INSERT INTO list
SET id = '',
name = '$name',
description = '$description',
custid = '$custid' ");
что это за функция mysql_ отправить?
что если изменить его на mysql_query();
Это должно быть легко понять, что происходит.
Fist вместо отправки запроса, который вы создаете в базу данных, эхо-сигнал (или запишите его) и посмотрите, что вы действительно отправляете в базу данных.
Если это не делает очевидным, посмотрите, что должен сказать mysql_error().
mysql_connect("localhost", "username", "password") or die(mysql_error());
mysql_select_db("database") or die(mysql_error());
$name = mysql_real_escape_string($_POST['name']);
$description = mysql_real_escape_string($_POST['description']);
$custid = mysql_real_escape_string($_SESSION['customerid']);
//If you doing Update use this code
mysql_query("UPDATE list SET id = '', name = '$name', description = '$description' WHERE custid = '$custid' ") or die(mysql_error());
//OR if you doing Insert use this code.
mysql_query("INSERT INTO list(name, description, custid) VALUES('$name', '$description', '$custid')") or die(mysql_error());
//If custid is Integer type user $custid instead of '$custid'.
Если вы обновляете записи в таблице списка на основе custid, используйте команду UPDATE ИЛИ, если вы вставляете записи в таблицу списка, используйте команду INSERT.
Типичный отказ от понимания того, как использовать определенные функции...
Вы используете mysql_real_escape_string для сырых входных данных. Вы когда-нибудь слышали о санкционировании/подтверждении ввода? mysql_real_escape_string
не имеет смысла для чисел. Если вы проверили переменную как число, вам не нужно ее избегать.
mysql_send - это псевдоним для mysql_query?
Используйте код отладки, добавьте echo mysql_error();
после mysql_send(...)
.
mysql_real_escape_string должно иметь соединение с базой данных, переданное как второй аргумент, поскольку оно запрашивает базу данных, какие символы должны быть экранированы.
$connection = mysql_connect(HOST, USERNAME, PASSWORD);
$cleanstring = mysql_real_escape_string("my string", $connection);
$sql = "INSERT INTO list SET id = '', name = '$name'"
т. Д., А затемecho $sql
(илиdie($sql)
). Это может пролить некоторый свет на то, что вызывает проблему. Кроме того, как вы подключаетесь к базе данных, самостоятельно или через какой-то сторонний API? Если последнее, возможно, есть метод, который API рекомендует для экранирования данных.