2015-02-08 2 views
-1

Привет У меня есть следующий запрос:Как использовать CONCAT в запросе обновления

$sql = "update zzz_users set password = "'".$encrypted."' where username = '".$email."'"; 
CustomQuery($sql); 

И я просто не могу получить право Concat, может кто-то пожалуйста, покажите мне, как это сделать

+1

Не можете видеть, где вы используете concat? – Mihai

ответ

0

Правильный запрос является:

$sql = "update zzz_users set password = '" . $encrypted . "' where username = '" . $email . "'"; 
+0

Правильный запрос не имеет этого '' ". $ Encrypted." '', Вместо этого должен быть подготовлен запрос. – VeeeneX

+1

@VeeeneX: вопрос о синтаксисе PHP, мы не знаем, что делает функция CustomQuery, и что есть в переменных. В '$ ecnrypted' можно избежать и хешировать пароль, тогда все будет в порядке. – panther

+0

Никогда не доверяйте функциям пользователя, никогда. – VeeeneX

-1

Существует " слишком много после password =. Вам следует избегать строк, прежде чем записывать их в базу данных, иначе вы можете получить возможность SQL-инъекции.

$sql = "update zzz_users set password = '" .mysql_real_escape_string($encrypted). "' where username = '" .mysql_real_escape_string($email). "'"; 
CustomQuery($sql); 
+1

Passowrd должен быть хэширован, '_real_escape_string' не является правильным способом (возможно, он хэширован в этом var, мы не знаем). Расширение 'Mysql' устарело. – panther

0

Здесь намного больше ошибок, чем не получить правильное сцепление.

Прежде всего, если вы просто пытаетесь поместить переменные в строку в PHP, рассмотреть вопрос об использовании двойных кавычек и ввод переменных непосредственно в строку:

$sql = "UPDATE `zzz_users` SET `password` = $encrypted WHERE `username` = $email"; 

Там нет необходимости для всех запуска и остановка строк в этом случае.

Однако, что вы здесь делаете, чрезвычайно опасно из-за SQL Injection attacks. Вы должны ОПРЕДЕЛЕННО НЕ ставить переменные непосредственно в ваши команды SQL.

Лучший способ сделать это - использовать библиотеку, которая знает, как принимать строки форматирования и создавать безопасные SQL для вас. Например, что-то вроде MeerkoDB позволит вам написать это SQL заявление так:

DB::query("UPDATE `zzz_users` SET `password`=%s WHERE `username`=%s", $encrypted, $email); 

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

+0

Прочтите ответ пантеры и комментарии ниже. – VeeeneX

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