For some reason the MySQL client I downloaded with MySQL server does not work - it is stuck when connecting.
Instead of spending time and trouble to find a fix for that, it is much simpler just to write MySQL own client script.
| #!/usr/bin/env php | |
| <?php | |
| if(!defined("STDIN")) define("STDIN", fopen("php://stdin", "R")); | |
| $host = "localhost"; | |
| $user = "root"; | |
| $password = ""; | |
| $schema = ""; | |
| $opts = getopt("h:u:p:s:"); | |
| if(isset($opts["h"])) $host = $opts["h"]; | |
| if(isset($opts["u"])) $user = $opts["u"]; | |
| if(isset($opts["p"])) $password = $opts["p"]; | |
| if(isset($opts["s"])) $schema = $opts["s"]; | |
| $db = @new mysqli($host, $user, $password, $schema); | |
| if(isset($db->conenct_error)) die($db->connect_error); | |
| echo "Connected!", PHP_EOL; | |
| while(true){ | |
| echo "> "; | |
| $line = rtrim(trim(fgets(STDIN)), ";"); | |
| if($line === "exit") break; | |
| $start = microtime(true); | |
| $result = $db->query($line); | |
| $end = microtime(true); | |
| if($result === false){ | |
| echo "Error: $db->error", PHP_EOL; | |
| }elseif($result instanceof mysqli_result){ | |
| $cols = []; | |
| $rows = 0; | |
| while(is_array($row = $result->fetch_assoc())){ | |
| foreach($row as $k => $v){ | |
| if(!isset($cols[$k])) $cols[$k] = [$k]; | |
| $cols[$k][] = $v; | |
| } | |
| $rows++; | |
| } | |
| $result->close(); | |
| if($rows === 0){ | |
| echo "Empty result set "; | |
| }else{ | |
| $paddings = []; | |
| foreach($cols as $k => $v){ | |
| $paddings[$k] = max(array_map("strlen", $v)); | |
| } | |
| $len = array_sum($paddings) + 1 + count($cols) * 3; | |
| for($i = 0; $i <= $rows; $i++){ | |
| if($i === 0) echo str_repeat("=", $len), PHP_EOL; | |
| foreach($cols as $k => $v){ | |
| echo "| " . str_pad($v[$i], $paddings[$k], " ", STR_PAD_BOTH) . " "; | |
| } | |
| echo "|", PHP_EOL; | |
| if($i === 0) echo str_repeat("=", $len), PHP_EOL; | |
| } | |
| echo str_repeat("=", $len), PHP_EOL; | |
| echo ($rows === 1 ? "1 row" : "$rows rows") . " in result set "; | |
| } | |
| }elseif(strtoupper(substr($line, 0, 6)) === "INSERT" and isset($db->insert_id)){ | |
| echo "Insert ID: $db->insert_id", PHP_EOL; | |
| }else{ | |
| echo "Query success "; | |
| } | |
| echo "(Query completed in " . round($end - $start, 4) . " second", $end - $start > 1 ? "s" : "", ")", PHP_EOL; | |
| } |