2014-12-11 6 views
-4

Я пытаюсь получить значение из MySQLMysql Неверный синтаксис ошибки

  $email = $_SESSION['email']; 
      $email = mysql_real_escape_string($email); 
      $depst = "SELECT dept FROM stud_reg WHERE email='$email'"; 
      $query="SELECT * FROM events WHERE `group`='$depst'"; 

Но я получаю неизвестную ошибку.

 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '**@**.com''' at line 1 

Хотя я coudn't найти любые синтаксические ошибки

+0

Кроме того, что вы полностью забыли запустить первый запрос? –

+0

Я не получил этого @ IgnacioVazquez-Abrams –

+0

@ IgnacioVazquez-Abrams Я думаю, что он предназначен как подзапрос. –

ответ

2

Поскольку вы не выполнить 1-запрос, просто использовать его в качестве подзапроса в последнем заявлении:

Изменить

$query="SELECT * FROM events WHERE `group`='$depst'"; 

для

$query="SELECT * FROM events WHERE `group`=($depst)"; 
1

Ваш код кажется уязвимым для атак SQL-инъекций (пожалуйста, read this для получения дополнительной информации). Вы должны использовать подготовленные заявления для такого рода вещи:

$mysqli->prepare("SELECT dept FROM stud_reg WHERE email=?"); 
$stmt->bind_param("s", $email); 
$stmt->execute(); 

рекомендации:

+0

Дело в том, что мы не знаем, так как мы не знаем источник '$ _SESSION ['email']'. Нет никакого намека на то, что давайте подумаем, что источник из '$ _POST' или' $ _GET'. Поэтому, если '$ _SESSION ['email']' извлекается из примера db, там нет проблем –

+0

@FabienTheSolution согласился, но я узнал болезненный урок: когда все может пойти не так, они * будут * ошибаться ... так что это хорошая дисциплина, чтобы каждый раз использовать подготовленные заявления, просто чтобы убедиться, что плохих вещей не произойдет – Barranka

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