2013-06-01 9 views
0

Я не смог создать схему базы данных MySQL и назначить права пользователя с помощью PDO, я не могу найти ничего плохого с моим кодом:Невозможно создать схему базы данных с ПДО

$db = $this->pdo->prepare('CREATE SCHEMA :dbName; 
          GRANT ALL ON :dbName.* TO :[email protected]`localhost` IDENTIFIED BY :dbPassword'); 
    $db->bindParam(':dbName', $dbName, PDO::PARAM_STR); 
    $db->bindParam(':dbUser', $dbUser, PDO::PARAM_STR); 
    $db->bindParam(':dbPassword', $dbPassword, PDO::PARAM_STR); 
    $db->execute(); 
    var_export($db->errorInfo()); 

возвращается: «Вы ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с \ '\' test \ '; GRANT ALL ON \ 'Тест \'. * TO \ 'тест \' в строке 1'

+0

@PeeHaa 埽 Запрос, который я использую, действителен и протестирован в консоли. – user2443876

+0

Если работает несколько запросов, вы, вероятно, работаете с эмулированными подготовленными операторами. – PeeHaa

ответ

1
  • параметров (например, :dbName) принимают скалярные входы, такие как строки и числа. Вы не можете использовать их для имен столбцов или имен таблиц; они должны быть явно введены в запрос. То есть, CREATE SCHEMA 'test' потерпит неудачу, но CREATE SCHEMA test - это то, что вам нужно.
  • PDO не может запускать более одного запроса в одном заявлении (специально). Разделите это на отдельные запросы.
+0

Спасибо за ответ, я действительно хотел избежать запросов, подобных exec. PDO фактически принимает несколько запросов в одном подготовленном заявлении, проверен. – user2443876

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