Using rawQuery for CREATE TABLE
Closed this issue · 3 comments
boionfire81 commented
Doesn't seem to work. It says error, but when using getLastErrno() it prints nothing
boionfire81 commented
Here's my code
`echo "start";
require_once('includes/db/MysqliDb.php');
echo "<br>Included database driver<br>";
echo $_POST['host']."<br>".$_POST['username']."<br>".$_POST['password']."<br>".$_POST['name']."<br>".$_POST['key'];
$db = new MysqliDb (Array (
'host' => $_POST['host'],
'username' => $_POST['username'],
'password' => $_POST['password'],
'db'=> $_POST['name']));
if($db->rawQuery("CREATE TABLE `settings`(`setting_id` varchar(100) COLLATE utf8mb4_bin DEFAULT NULL,`setting_value` varchar(1000) COLLATE utf8mb4_bin DEFAULT NULL")){
echo "success";
}else{
$error=$db->getLastError();
echo $error;
exit;
}`
It echos my stuff. I verified the login was correct a couple times, and nothing prints up as to why the raw query doesn't work
darkcavalry commented
Im using this query for table creation maybe it's help for you.
$db_pref = '';
// * users Table
if(!$db->tableExists($db_pref."users")){
$db->rawQuery("
CREATE TABLE `".$db_pref."users` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`user` varchar(100) DEFAULT NULL,
`email` varchar(100) NOT NULL,
`password` varchar(50) NOT NULL,
`user_type` tinyint(2) NOT NULL DEFAULT 0,
`user_active` tinyint(2) NOT NULL DEFAULT 0,
`user_primary` tinyint(2) NOT NULL DEFAULT 0,
`created_on` timestamp NOT NULL DEFAULT current_timestamp(),
`last_login` datetime DEFAULT NULL,
`login_ip` varchar(15) DEFAULT NULL,
`user_access` text DEFAULT NULL,
`user_folder` varchar(20) DEFAULT NULL,
`session_token` varchar(255) DEFAULT NULL,
`user_theme` varchar(50) DEFAULT NULL,
`api_key` varchar(50) DEFAULT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPRESSED;
");
if($db->getLastErrno() !== 0){
die('Table creation error<br>'.$db->getLastError());
}
}
ThingEngineer commented
It looks like the (working) example from @darkcavalry accomplishes what you want.
If not, utilize debugging tools like var_dump or print_r to inspect the value of $db->getLastError() after the query execution, also verify db permissions. And consider using prepared statements instead of raw queries for improved security in this situation.