Ошибка при запросе базы данных в php-скрипте

#php

#php

Вопрос:

я пытаюсь вставить некоторые данные из формы, и это выдает ошибку каждый раз, когда «ошибка запроса базы данных», моя кодировка такая

 <?php
 $dbc = mysqli_connect('localhost', 'root', '', 'askquestion')
    or die('Error connecting to MySQL server.');   

   $first_name=$_POST['firstname'];
   $last_name=$_POST['lastname'];
   $email=$_POST['email'];
   $password=$_POST['password'];
   $state=$_POST['state'];
   $city=$_POST['city'];
   $category=$_POST['category'];


    $query = "INSERT INTO signup (first_name, last_name, email, password, state, city, category)  VALUES ('$first_name', '$last_name', $email, $password, $state, $city, $category)";

    $result=mysqli_query($dbc, $query) or die('Error querying database.'). mysql_error();;


    echo 'you are registered...!';

   mysqli_close($dbc);


   ?> 
  

Ответ №1:

Вы уязвимы для атак с использованием SQL-инъекций. Всегда экранируйте входящие значения POST, используя mysql_real_escape_string() . Это помогает предотвратить внедрение SQL и гарантирует, что все значения, используемые в вашем операторе запроса, которые содержат специальные символы, экранируются должным образом (например, кавычки).

Кроме того, убедитесь, что все строковые значения правильно заключены в кавычки в вашем операторе VALUES.

Комментарии:

1. на самом деле это не ответ на вопрос, не так ли?

2. Абсолютно, потому что, если бы входящие значения POST были экранированы, специальные символы не нарушили бы инструкцию INSERT.

Ответ №2:

Взгляните на свой запрос, у вас есть

 '$last_name', $email, $password, $state, $city, $category)
  

В то время как вы должны иметь:

 $query = "INSERT INTO signup (first_name, last_name, email, password, state, city, category)  VALUES ('$first_name', '$last_name', '$email', '$password', '$state', '$city', '$category')";
  

Кроме того, попробуйте использовать

 die(mysql_error());
  

в разработке

Для безопасности SQL вы всегда должны экранировать каждое входное значение:

 $first_name=mysql_real_escape_string($_POST['firstname']);
  

Комментарии:

1. Большое вам спасибо much……..it была глупая ошибка. и я также вставил этот код mysql_real в. Большое спасибо. Теперь он работает.

Ответ №3:

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

Я бы предположил, что все значения, которые вы получаете из POST super global, представляют собой текстовые строки. поэтому замените это: (проверьте структуру вашей таблицы, если это не работает):

 $query = "INSERT INTO signup (first_name, last_name, email, password, state, city, category)  VALUES ('$first_name', '$last_name', $email, $password, $state, $city, $category)";
  

с помощью этого:

 $query = "INSERT INTO signup (first_name, last_name, email, password, state, city, category) VALUES ('$first_name', '$last_name', '$email', '$password', '$state', '$city', '$category')";
  

для получения дополнительной информации прочитайте здесь: http://www.w3schools.com/sql/sql_insert.asp