2015-03-18 4 views
0

Я пытаюсь выполнить следующий запрос с помощью PHP:Mysql пользователь не может обновить временную таблицу (имеет все привилегии) ​​

  CREATE TEMPORARY TABLE temp_table 
      AS 
      SELECT * FROM vacancies WHERE vacancyid = '22207'; 
      UPDATE temp_table SET vacancyid='22216' WHERE vacancyid='22207'; 
      INSERT INTO newdatabase.vacancies SELECT * FROM temp_table; 
      DROP TEMPORARY TABLE temp_table; 

Это дает ошибку:

Errormessage: 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 'UPDATE temp_table SET vacancyid='22216' WHERE vacancyid='22207'; 

Если я выполнить запрос непосредственно в PMA он отлично работает. Пользователь подключает с в PHP имеет следующие priveliges:

GRANT ALL PRIVILEGES ON firstdatabase.* TO 'username'@'%' WITH GRANT OPTION; 

GRANT ALL PRIVILEGES ON newdatabase.* TO 'username'@'%' WITH GRANT OPTION; 

Каждые получил ключ?

PHP код:

  //Get the new autoincrement id of the vacancy of individual jobboard 
      $iNewId = $db->lookup("SELECT vacancyid FROM ".$aBoardInfo['username'].".vacancies ORDER BY vacancyid DESC LIMIT 1"); 
      $iNewId = $iNewId + 1; 

      $db->query("         
     CREATE TEMPORARY TABLE temp_table 
     AS 
     SELECT * FROM vacancies WHERE vacancyid = '". $iVacancyid ."' ; 

     UPDATE temp_table SET vacancyid=". $iNewId ." WHERE vacancyid='". $iVacancyid ."' ; 

     INSERT INTO ".$aBoardInfo['username'].".vacancies SELECT * FROM temp_table ; 

     DROP TEMPORARY TABLE temp_table ; 
     "); 
+0

Добавлена ​​PHP код на вопрос. –

+0

Я действительно не понимаю. Я должен разделить запрос на несколько запросов? И почему он работает в PMA? –

+0

да, вы должны разбить его. Я не знаю, как PMA выполняет запрос. – Jens

ответ

0

Как описано в documentation в примере 2

Пример # 2 SQL Injection

<?php 
$mysqli = new mysqli("example.com", "user", "password", "database"); 
$res = $mysqli->query("SELECT 1; DROP TABLE mysql.user"); 
if (!$res) { 
    echo "Error executing query: (" . $mysqli->errno . ") " . $mysqli->error; 
} 
?> 

The above example will output:

Error executing query: (1064) 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 'DROP TABLE mysql.user' at line 1

Prepared statements

Use of the multiple statement with prepared statements is not supported.

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