Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2016
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.62 KB | None | 0 0
  1. <?php namespace isql;
  2.  
  3. use rdbms\DriverManager;
  4. use rdbms\SQLException;
  5. use rdbms\SQLConnectionClosedException;
  6. use util\cmd\Console;
  7.  
  8. const PROMPT = "\e[31;1m\$u@\$h \e[36;1m\$d\e[0m [\e[32;1m%s\e[0m]\n\$";
  9.  
  10. $conn= DriverManager::getConnection($argv[1]);
  11. $conn->connect();
  12. Console::writeLine("\e[32m@", $conn, "\e[0m");
  13. Console::writeLine('Type "exit" to end shell');
  14. Console::writeLine();
  15.  
  16. $dsn= $conn->getDSN();
  17. $db= $dsn->getDatabase();
  18. $prompt= strtr(PROMPT, ['$u' => $dsn->getUser(), '$h' => $dsn->getHost(), '$d' => $db]);
  19. while (null !== ($sql= Console::readLine(sprintf($prompt, $conn->hashCode())))) {
  20. $sql= trim($sql, '; ');
  21. if ('' === $sql) {
  22. continue;
  23. } else if ('exit' === $sql) {
  24. break;
  25. } else if (1 === sscanf($sql, 'use %s', $db)) {
  26. try {
  27. $conn->selectdb($db);
  28. $prompt= strtr(PROMPT, ['$u' => $dsn->getUser(), '$h' => $dsn->getHost(), '$d' => $db]);
  29. Console::writeLine();
  30. } catch (SQLException $e) {
  31. Console::writeLine("\e[31m*** ", $e->compoundMessage(), "\e[0m");
  32. }
  33. continue;
  34. }
  35.  
  36. query: try {
  37. $q= $conn->query($sql);
  38. if ($q->isSuccess()) {
  39. Console::writeLine('OK: ', $q);
  40. } else {
  41. while ($record= $q->next()) {
  42. Console::writeLine($record);
  43. }
  44. }
  45. $q->close();
  46. Console::writeLine();
  47. } catch (SQLConnectionClosedException $e) {
  48. Console::writeLine("\e[31mConnection was closed, reconnecting...\e[0m");
  49. $conn->close();
  50. $conn->connect();
  51. $conn->selectdb($db);
  52. goto query;
  53. } catch (SQLException $e) {
  54. Console::writeLine("\e[31m*** ", $e->compoundMessage(), "\e[0m");
  55. }
  56. }
  57.  
  58. $conn->close();
  59. Console::writeLine();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement