function sql_browser_insert($db) { $schema = mdb2_col($db, 0, "SELECT column_name FROM information_schema.columns WHERE table_name = '%q'", $_GET['table']); array_shift($schema); html_start(); ?>
html_end(); } function sql_browser_execute_common($db, $command, $query) { global $last_insert_id; $affected = mdb2_exec($db, $command.' '.$query); logit('executed '.$command.' '.$query); if ($command == 'UPDATE' || $command == 'DELETE') { $_SESSION['notice'][] = 'Success'; $_SESSION['notice'][] = 'Affected rows: '.$affected; } else if ($command == 'INSERT') { $_SESSION['notice'][] = 'Success'; $_SESSION['notice'][] = 'Inserted with primary key value '.mdb2_single_val($db, $last_insert_id); } header('Location: sql.php?mode=select&count='.urlencode($_POST['count']).'&offset='.urlencode($_POST['offset']).'&select='.urlencode($_POST['select'])); } function sql_browser_show($db) { $db->loadModule('Manager'); $fields = $db->listTableFields($_GET['table']); print_r($fields); exit; } function sql_browser_do_insert($db) { $schema = mdb2_all_assoc_rekey($db, "SELECT column_name, data_type FROM information_schema.columns WHERE table_name = '%q'", $_POST['table']); array_shift($schema); $cols = array(); $values = array(); foreach ($schema as $key => $value) { $cols[] = $key; if ($value == 'int') { if ($_POST[$key] == 'NULL') $values[] = 'NULL'; else $values[] = mdb2_printf($db, '%i', $_POST[$key]); } else $values[] = mdb2_printf($db, "'%q'", $_POST[$key]); } $query = 'INTO '.$_POST['table'].' ( '.implode(', ', $cols).' ) VALUES ( '.implode(', ', $values).' )'; //echo($query); //exit; sql_browser_execute_common($db, 'INSERT', $query); } function sql_browser_do_delete($db) { $query = 'FROM '.$_POST['table']. ' WHERE '.$_POST['where']; sql_browser_execute_common($db, 'DELETE', $query); } function sql_browser_do_update($db) { $schema = mdb2_all_assoc_rekey($db, "SELECT column_name, data_type FROM information_schema.columns WHERE table_name = '%q'", $_POST['table']); array_shift($schema); $set = array(); foreach ($schema as $key => $value) { if ($value == 'int') { if ($_POST[$key] == 'NULL') $set[] = $key.' = NULL'; else $set[] = mdb2_printf($db, $key.' = %i', $_POST[$key]); } else $set[] = mdb2_printf($db, $key." = '%q'", $_POST[$key]); } $query = $_POST['table'].' SET '.implode(', ', $set).' WHERE '.$_POST['where']; sql_browser_execute_common($db, 'UPDATE', $query); } function sql_browser_select($db) { global $concat_begin, $concat_cont, $concat_end, $as_varchar, $show_tables; $tables = mdb2_col($db, 0, $show_tables); $insert = ''; if (!isset($_GET['offset']) || $_GET['offset'] == '' || $_GET['offset'] < 0) $offset = 0; else $offset = $_GET['offset']; if (!isset($_GET['count']) || $_GET['count'] == '' || $_GET['count'] < 1) $count = 20; else $count = $_GET['count']; if (isset($_GET['select'])) { $query = $_GET['select']; if (preg_match('/\*( FROM ([[:alnum:]_]+)( WHERE .*)?( ORDER BY .*)?)$/', $query, $matches)) { $schema_res = mdb2_query($db, "SELECT column_name, data_type FROM information_schema.columns WHERE table_name = '%q'", $matches[2]); $row = $schema_res->fetchRow(MDB2_FETCHMODE_ASSOC); if ($row['data_type'] == 'int') { $update = ", $concat_begin 'wijz' $concat_end wijz, $concat_begin 'del' $concat_end del"; } else $update = ''; $insert = 'insert'; $query = '*'.$update.' '.$matches[1]; } if ($_GET['submit'] == '<') { $offset -= $_GET['count']; if ($offset < 0) $offset = 0; } else if ($_GET['submit'] == '>') $offset += $count; $db->setLimit($count, $offset); //echo('SELECT '.$query); $res = $db->query('SELECT '.$query); $errorInfo = $db->errorInfo($res); if (MDB2::isError($res)) error_user($res->getMessage(), $errorInfo[2].' SELECT '.$query, 'sql.php?mode=select&select='.urlencode($_GET['select'])); } html_start(); ?>foreach ($tables as $value) { ?> echo(htmlenc($value)) ?> } ?>
echo($insert); if (isset($res)) mdb2_res_table($res); html_end(); } function sql_browser() { global $dsn; // simple SQL browser and mangler // only to be accessible by SQL ADMIN check_admin_sql(); if (!isset($_GET['mode'])) $_GET['mode'] = 'select'; $db = mdb2_open($dsn); switch ($_GET['mode']) { case '': case 'select': sql_browser_select($db); break; case 'update': sql_browser_update($db); break; case 'do_update': sql_browser_do_update($db); break; case 'insert': sql_browser_insert($db); break; case 'do_insert': sql_browser_do_insert($db); break; case 'delete': sql_browser_delete($db); break; case 'do_delete': sql_browser_do_delete($db); break; case 'show': sql_browser_show($db); break; default: error_system('invalid mode in SQL browser/mangler'); } } ?>