2015-09-14 7 views
1

Я пытаюсь узнать, как использовать переменные в MySQL:Использование переменного MySQL в внешних хранимых процедурах

$query = " 
    SET @myid = '1234'; 
    SELECT * FROM `table1` WHERE `id` = @myid; 
"; 

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

  • Я смотрел на и он утверждает, что это правильный синтаксис.
  • Я также выложил стек, но большинство вопросов основано на процедурах магазина .

Могут ли переменные MySQL ограничиваться только хранимыми процедурами? Если не то, что я делаю неправильно?

+4

Вы не можете запускать несколько запросов в одном вызове 'query()'. это все. issue 'query (" set ... ")' и 'query (" select ... ")' вместо этого. –

+0

вы можете показать нам код, который вы используете для выполнения этого sql, используете ли вы mysqli, pdo? – cmorrissey

+0

Его просто mysqli, снова смотря на руководство. Замечание Марка имеет смысл, поскольку примеры, которые я рассматривал, - это терминал https://dev.mysql.com/doc/refman/5.0/en/user-variables.html – Edward

ответ

0

Использование mysqli_multi_query()

Попытка использовать переменные рядный с запросами бросает синтаксическую ошибку в строке 1. Спасибо вам Марк Б.

SET @myid = '<?php echo $myid; ?>'; 
SELECT t.*, 
    CASE WHEN m.`dob` BETWEEN @uDateStart AND @uDateEnd 
    etc... 

Мое решение было использовать mysqli::multi_query или mysqli_multi_query так:

$this -> db -> multi_query($sql); 
$i = 0; 
$querySelect = 1; //query 1 
do{ 
    if($result = $this -> db -> store_result()) { 
     if($i === $querySelect) { 
      while($row = mysqli_fetch_array($result)) { 
       $data[] = $row; 
      } 
      mysqli_free_result($result); 
     } 
    } 
    $i++; 
} while($this -> db -> more_results() && $this -> db -> next_result()); 

$querySelect предотвращает возвращение нежелательных наборов результатов.

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