2016-03-28 11 views
0

У меня есть таблица (core_customer_information), и я хочу создать SQL-запрос в php, который использует переменную $ code и обновляет активированное поле в моей таблице.Обновление таблицы sql с помощью php

$code = mysqli_real_escape_string($conn, $_GET['code']); 

$check = mysqli_query("SELECT * FROM core_customer_information WHERE activation_code='$code' AND activated='1' "); 

     if (mysqli_num_rows($check) == 1) 
     { 
      die ('The account has already been activated'); 
     } 
     else 
     { 
      $activate = mysqli_query("UPDATE core_customer_information SET activated='1' WHERE activation_code='$code'"); 
      echo ('Your account has know been activated <br>'); 
      echo $code; 
     } 

Прежде всего, я проверить, является ли активированный равеном 1, в этом случае учетной записи классифицируются как активирована, и если нет, то я тогда создать запрос UPDATE для обновления активированного поля этого класса.

Моя проблема заключается в том, что запрос не обновляет мою таблицу, и я не уверен, где проблема.

Буду признателен, если кто-то может забрать меня, пожалуйста.

+0

** ПРЕДУПРЕЖДЕНИЕ **: При использовании 'mysqli' вы должны использовать параметризованные запросы и [' bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php) для добавьте данные пользователя в ваш запрос. ** НЕ используйте ** интерполирование строк или конкатенацию, чтобы выполнить это, потому что вы в конечном итоге допустите ошибку и создадите серьезную [SQL-инъекцию] (http://bobby-tables.com/). – tadman

+0

Рекомендую вам открыть новый вопрос для новых вопросов. (Для других людей, проверяющих это, просмотрите журналы редактирования) – GGG

ответ

0

Я бы порекомендовал вам использовать mysqli_real_escape_string, как он сбегает строку, принимая во внимание текущую кодировку соединения, как указано на странице:

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

Чтобы предотвратить большинство методов инъекции MySQL, вы должны сделать следующее:

$code = mysqli_real_escape_string($link, $_GET['code']); 

Если вы когда-нибудь использовать адаптер, как ADODB или какой-то другой, я бы рекомендовал использовать подготовленные заявления и их методы предотвращения внедрения SQL.

0

Это не совсем ясно из вашего вопроса, на каком языке вы будете использовать для запуска запросов SQL (поскольку только теги SQL и MySQL в данный момент ...)

Но если язык похож на Java то вы можете использовать что-то похожее на Java PreparedStatement. (См. https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html)

A PreparedStatement более безопасен, чем простая конкатенация динамических переменных в строки sql.

Смежные вопросы