Мой запрос MySQL не работает, ничего не идет в базу данных - PullRequest
0 голосов
/ 12 октября 2011

Я пытаюсь поместить одну статью в базу данных, но не получается:

$con = mysql_connect("localhost","root","") or die(mysql_error());
mysql_select_db("easy_db",$con);
mysql_query("INSERT INTO easy_db.article (Title, Article, Topics, author) VALUES($title, $data, $topic, $author)");

mysql_close();

Я проверил орфографию и напечатал все переменные ($ title, $ data, $ topic, $ author),что я получил с пост-http ..

Ничего не добавляется в базу данных с этим оператором.Почему?

ОБНОВЛЕНО

У меня тоже есть ошибка:

= mysql_query("SELECT page FROM `easy_db`.`article` ORDER BY article_id DESC LIMIT 1")  or die(mysql_error());

Ответы [ 5 ]

2 голосов
/ 12 октября 2011

Используйте оператор проверки ошибок после запроса, чтобы вы знали, что происходит не так.Также остерегайтесь SQL INJECTION и ставьте одинарные кавычки вокруг значений:

 $con=mysql_connect("localhost","root","") or trigger_error(mysql_error());
    mysql_select_db("easy_db",$con);
    $title = mysql_real_escape_string($title);
    $article = mysql_real_escape_String($article);
    $topic = mysql_real_escape_string($topic);
    $author = mysql_real_escape_string($author);
    mysql_query("INSERT INTO easy_db.article (Title, Article, Topics, author)
                 VALUES('".$title."', '".$data."', '".$topic."', '".$author."')") 
                 or die ('Error: '.mysql_error());


   // mysql_close();  this is not necessary, though
1 голос
/ 12 октября 2011

Поскольку этот вопрос является точной копией тысяч уже отвеченных другим (но никогда не закрывающихся), я собираюсь указать на одну несколько другую вещь.

Кажется, что все в мире пишут SQLошибки в браузере и даже уничтожение их скриптов в середине исполнения.Предоставление пользователю зашифрованного сообщения без каких-либо элементов управления, но предоставление потенциальному злоумышленнику весьма полезной информации.И в то же время оставляя программиста совершенно неосведомленным об ошибках, произошедших на сайте.Забавно, а?

Это темная сторона языка PHP в целом, которая страдает от ужасных примеров кода, распространяющихся по всему миру, и является плохой стороной этого сайта переполнения стека, поскольку он принимает огромное участие враспространение этих плохих практик, неправильного кода, нелепых привычек и странных суеверий.

Потому что качество ответа никогда не повлияет на точки его повторения.Таким образом, можно написать любую ерунду, и она будет подвергнута голосованию, утверждению и дальнейшему копированию.

Итак, если вы хотите сделать свой код немного лучше - никогда не используйте die().В случае выполнения запросов используйте trigger_error(), вместо этого он заполняет информацию об ошибке в соответствии с текущими настройками PHP: на тестовом сервере он переходит на экран, а на работающем сервере он регистрируется для программиста сайта.И это не убьет ваш сценарий.

1 голос
/ 12 октября 2011

Пожалуйста, замените

mysql_query("INSERT INTO easy_db.article (Title, Article, Topics, author) VALUES($title, $data, $topic, $author)");

на

mysql_query("INSERT INTO easy_db.article (Title, Article, Topics, author) VALUES($title, $data, $topic, $author)") or die(mysql_error();

и попробуйте снова.Если есть ошибка, сообщите нам.Убедитесь, что вы из вашей переменной, где вы ее получили.

Вам следует использовать глобальные переменные $_POST и $_GET.

0 голосов
/ 12 октября 2011

Скорее всего, вы забыли процитировать введенные данные.Запрос должен выглядеть примерно так:

INSERT ... VALUES ('$title', '$data', '$topic', '$author')

, а ваш код должен быть:

$result = mysql_query(...) or die(mysql_error());

Если бы вы включили часть 'or die ()', вы получили бы синтаксисошибка от mysql, говорящая вам, почему запрос не удался.Практически никогда не рекомендуется проверять наличие ошибок после выполнения запроса.Даже если SQL синтаксически совершенен, существует слишком много других причин, по которым запрос не может НЕ проверять.

0 голосов
/ 12 октября 2011

У вас нет одинарных кавычек вокруг ваших VALUES('val1', 'val2'...) переменных ::

mysql_query("INSERT INTO easy_db.article (Title, Article, Topics, author) VALUES('$title', '$data', '$topic', '$author')");

Вы должны проверить успешность запроса, например:

$result =  mysql_query("INSERT INTO easy_db.article (Title, Article, Topics, author) VALUES('$title', '$data', '$topic', '$author')");
if (!$result) {
  echo mysql_error(); // find out what went wrong...
}

Мы не видим остальной части вашего кода, но, пожалуйста, убедитесь, что вы также очистили все свои входные переменные от $_POST, используя mysql_real_escape_string():

$title = mysql_real_escape_string($_POST['title']);
// etc...
...