How to backup SQL data base with PHP - php

How can I make a SQL file with PHP that contains SQL script to create exact copy of my entire database. Like I can do it in PhpMyAdmin.
For example:
I have a database with few tabel and I would like PHP script to to return SQL script like:
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
--
-- Database: `first_db`
--
-- --------------------------------------------------------
--
-- Structure of table `my_table`
--
CREATE TABLE IF NOT EXISTS `my_table` (
`id` int(11) NOT NULL,
`naslov` text COLLATE utf8_slovenian_ci NOT NULL,
`besedilo` text COLLATE utf8_slovenian_ci NOT NULL,
`datum` text COLLATE utf8_slovenian_ci NOT NULL,
`avtor` text COLLATE utf8_slovenian_ci NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_slovenian_ci;
--
-- Fill data for `my_table`
--
INSERT INTO `my_table` (`id`, `naslov`, `besedilo`, `datum`, `avtor`) VALUES

just use exec() in php with the following shell command
exec('mysqldump –u [user name] –p[password] [database name] > [dump file]');
dont forget that exec can be disabled in php.ini if it doesn't work

Related

Insert common SQL query along with multiple functions

I'm inserting an SQL Template in a new database through PHP code using the mysqli->multi_query() function. This SQL Template contains something like:
CREATE TABLE `applicants` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_bin NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
DELIMITER $$
CREATE FUNCTION `myFunctionExample`(`someField` INT(11), `someOtherField` VARCHAR(255) CHARSET utf8) RETURNS double(10,3)
BEGIN
.... MY SQL ....
RETURN ...;
END;
DELIMITER $$
CREATE FUNCTION `mySecondFunctionExample`(`someField` INT(11), `someOtherField` VARCHAR(255) CHARSET utf8) RETURNS double(10,3)
BEGIN
.... MY SQL ....
RETURN ...;
END;
I have two different problems:
When using PHP:
All the tables are created, no functions are created
When using PHPMyAdmin:
All the tables are created, only the first function is created
So it seems I have a problem separating the functions (?) and somehow mysqli->multi_query() is not creating the functions?
Solved.
With the help of #Uueerdo I end up realizing I might not need any limiters for my functions when creating them through PHP. I also found this thread Execute mysql "create function" statement with PHP that talks about not having to worry about delimiters in PHP.
So I just removed the DELIMITER $$ from my code and made sure I used ; to separate everything:
CREATE TABLE `applicants` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_bin NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE FUNCTION `myFunctionExample`(`someField` INT(11), `someOtherField` VARCHAR(255) CHARSET utf8) RETURNS double(10,3)
BEGIN
.... MY SQL ....
RETURN ...;
END;
CREATE FUNCTION `mySecondFunctionExample`(`someField` INT(11), `someOtherField` VARCHAR(255) CHARSET utf8) RETURNS double(10,3)
BEGIN
.... MY SQL ....
RETURN ...;
END;

The phpMyAdmin configuration storage is not completely configured, some extended - Xammp - Version -7.3.8-0-VC15

I updated Xampp version - Latest version = 7.3.8-0-VC15
I am getting these errors -
Error 1-
The phpMyAdmin configuration storage is not completely configured, some extended features have been deactivated. Find out why.
I clicked on to find out why but did not understand that -
Error 2 -
mysqli_real_connect(): (HY000/1045): Access denied for user 'pma'#'localhost' (using password: NO)
Error 3-
Connection for controluser as defined in your configuration failed.
I tried many solutions but not solved.
It's a mistake for missing some defaults table for default phpmydamin database. For solve this mistake you must to run following queries in phpmyadmin database
I suggest you download and install JetBrains DataGrip and connect this software with your local database and run following query on it to fixing phpmyadmin problem. another way is if you are friendly with command line log in to mysql with command line and run queries.
CREATE TABLE IF NOT EXISTS `pma_users` (
`username` varchar(64) NOT NULL,
`usergroup` varchar(64) NOT NULL,
PRIMARY KEY (`username`,`usergroup`)
)
COMMENT='Users and their assignments to user groups'
DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
CREATE TABLE IF NOT EXISTS `pma_usergroups` (
`usergroup` varchar(64) NOT NULL,
`tab` varchar(64) NOT NULL,
`allowed` enum('Y','N') NOT NULL DEFAULT 'N',
PRIMARY KEY (`usergroup`,`tab`,`allowed`)
)
COMMENT='User groups with configured menu items'
DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
CREATE TABLE IF NOT EXISTS `pma_navigationhiding` (
`username` varchar(64) NOT NULL,
`item_name` varchar(64) NOT NULL,
`item_type` varchar(64) NOT NULL,
`db_name` varchar(64) NOT NULL,
`table_name` varchar(64) NOT NULL,
PRIMARY KEY (`username`,`item_name`,`item_type`,`db_name`,`table_name`)
)
COMMENT='Hidden items of navigation tree'
DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
Then add following code to config.inc.php file:
$cfg['Servers'][$i]['users'] = 'pma_users';
$cfg['Servers'][$i]['usergroups'] = 'pma_usergroups';
$cfg['Servers'][$i]['navigationhiding'] = 'pma_navigationhiding';

#1064 Error Message When trying to export local host database online

Hi am an aspiring Computer Scientist. I've been trying to upload my localhost site online for almost a day now. This is what I've done so far:
I created a DB online (from my online hosting acct.), created users and password. I went to my PHPmyAdmin on local host, selected my DB, exported it (a .sql file), edited the URL (find and replace). I went online, to my DB (online) and chose to import DB. I Selected my exported DB file (that of localhost) and clicked Go. I get the following error message:
It tells me:
1064 - You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use
near ' CREATE TABLE [IF NOT EXISTS] wp_commentmeta (meta_id
bigint(20) u' at line 1
CREATE TABLE IF NOT EXISTS `wp_commentmeta` (
`meta_id` BIGINT( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`comment_id` BIGINT( 20 ) UNSIGNED NOT NULL DEFAULT '0',
`meta_key` VARCHAR( 255 ) COLLATE utf8mb4_unicode_ci DEFAULT NULL ,
`meta_value` LONGTEXT COLLATE utf8mb4_unicode_ci,
PRIMARY KEY ( `meta_id` ) ,
KEY `comment_id` ( `comment_id` ) ,
KEY `meta_key` ( `meta_key` ( 191 ) )
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci AUTO_INCREMENT =6;
Hope this improves my question?
I really appreciate the work every contributor on this platform has done prior to now. With you guys here at Stack Overflow, I know the nature of my problem, but I've not found a solution that directly applies to it. I can't figure out where the code is not right. Please I need a solution fast, even as people have to register on the site (a WP site) since yesterday.
Thanks to all.
The only way that you would (still) be receiving that error is because you are very most likely using your code via a PHP script, rather than executing it/inserting those codes inside phpmyadmin.
Since you did tag as PHP, that is the only conclusion I can come up with, since using your code in phpmyadmin, did create it successfully.
Minus the brackets of course, as I stated in comments.
Remove the brackets in here [ IF NOT EXISTS ].
You must've have taken the MySQL example literally from their site and used them.
http://dev.mysql.com/doc/refman/5.7/en/create-table.html
Those aren't meant to be used, but as an option.
Plus, if executing from a PHP script, it could be a quotes issue and using the wrong ones.
If you are attempting to, or wanting to create the table through a PHP script, an example of this would be:
$sql = "CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)";
if ($conn->query($sql) === TRUE) {
echo "Table MyGuests created successfully";
} else {
echo "Error creating table: " . $conn->error;
}
However, phpmyadmin does have an "IMPORT" option.
Open phpMyAdmin by clicking the phpMyAdmin icon
Select the database in the left menu that you will be working with
Click Import in the top menu
Under File to Import, click Browse and select the backup file you previously created (it will be either a .sql .zip or .tar.gz file).
Click Go at the bottom right
When the database has been imported successfully, you should see a message at the top of the page similar to: Import has been successfully finished, ## queries executed.
Pulled from http://www.inmotionhosting.com/support/website/phpmyadmin/import-database-using-phpmyadmin
Also consult:
http://www.techrepublic.com/blog/smb-technologist/import-and-export-databases-using-phpmyadmin/
which talks about WordPress.
and
https://codex.wordpress.org/Restoring_Your_Database_From_Backup
Another possible reason could be that there may be some type of unicode (hidden) character that was introduced, and/or a file encoding issue.
TBH; at this point in time, I am out of ideas.
Edit:
As an option, you can use the following to be run as a PHP script if it's still giving you problems:
Sidenote: This was pre-tested. Replace the xxx with your own login credentials.
<?php
$DB_HOST = 'xxx';
$DB_USER = 'xxx';
$DB_PASS = 'xxx';
$DB_NAME = 'xxx';
$Link = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($Link->connect_errno > 0) {
die('Connection failed [' . $Link->connect_error . ']');
}
$sql = "CREATE TABLE `wp_commentmeta` (
`meta_id` BIGINT( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`comment_id` BIGINT( 20 ) UNSIGNED NOT NULL DEFAULT '0',
`meta_key` VARCHAR( 255 ) COLLATE utf8mb4_unicode_ci DEFAULT NULL ,
`meta_value` LONGTEXT COLLATE utf8mb4_unicode_ci,
PRIMARY KEY ( `meta_id` ) ,
KEY `comment_id` ( `comment_id` ) ,
KEY `meta_key` ( `meta_key` ( 191 ) )
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci AUTO_INCREMENT = 6
";
if ($Link->query($sql) === TRUE) {
echo "Table created successfully";
} else {
echo "Error creating table: " . $Link->error;
}
Important: Copy this exact code and paste it into the "SQL" option in phpmyadmin and not "IMPORT".
CREATE TABLE IF NOT EXISTS `wp_commentmeta` (
`meta_id` BIGINT( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`comment_id` BIGINT( 20 ) UNSIGNED NOT NULL DEFAULT '0',
`meta_key` VARCHAR( 255 ) COLLATE utf8mb4_unicode_ci DEFAULT NULL ,
`meta_value` LONGTEXT COLLATE utf8mb4_unicode_ci,
PRIMARY KEY ( `meta_id` ) ,
KEY `comment_id` ( `comment_id` ) ,
KEY `meta_key` ( `meta_key` ( 191 ) )
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci AUTO_INCREMENT =6;
Then click on "GO". That is how I originally tested your code in phpmyadmin.
Are you sure that yr MySQL version is ‘4.1.14’? It's really old.
If it is, the problem is mySQL version.
utf8mb4 encoding is introduced in MySQL 5.5.3 (released in early 2010).
Also Please note that official wordpress docs say:
The utf8mb4 Upgrade
In WordPress 4.2, we’re upgrading tables to utf8mb4, when we can. Your site will only upgrade when the following conditions are met:
You’re currently using the utf8 character set.
Your MySQL server is version 5.5.3 or higher (including all 10.x versions of MariaDB).
Your MySQL client libraries are version 5.5.3 or higher. If you’re using mysqlnd, 5.0.9 or higher.
Also, in the doc there is en explicit reference to wp_commentmeta table.
In our query:
utf8mb4 charset
utf8mb4_unicode_ci collation
wp_commentmeta table
mySQL 4.1.14
Maybe upgranding mySQL can resolve your problems.
I had the same issue when uploading database to server.
Error
SQL query:
#
# Table structure of table `wp_commentmeta`
#
CREATE TABLE `wp_commentmeta` (
`meta_id` BIGINT( 20 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`comment_id` BIGINT( 20 ) UNSIGNED NOT NULL DEFAULT '0',
`meta_key` VARCHAR( 255 ) COLLATE utf8_unicode_520_ci DEFAULT NULL ,
`meta_value` LONGTEXT COLLATE utf8_unicode_520_ci,
PRIMARY KEY ( `meta_id` ) ,
KEY `comment_id` ( `comment_id` ) ,
KEY `meta_key` ( `meta_key` ( 191 ) )
) ENGINE = INNODB DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_520_ci;
I Just replace all utf8_unicode_520_ci with utf8_unicode_ci in database. Then I'm able to upload the database. This works for me.
You can try replace all utf8mb4_unicode_ci with utf8_unicode_ci and utf8mb4 with utf8 in database. Hope this will works for u.
When I contacted my host, they helped me resolve the issue. I got this message:
I could see that, in the file 'dbxxx.sql', the command 'Use dbxx;' was missing, this is the reason, you were receiving that error when trying to import the SQL file to the database.
My site is now up and running.

Syntax error, unexpected TEXT_STRING (Wamp/MySQL Workbench)

My dad-in-law's webserver broke down yesterday, and we are trying to get a new one up running.
We transfered the frm/MYD/MYI files to my computer, and I have now managed to restore the sql files and tables. But when I tried to launch the page, it just showed up a load of gibberish.
I then opened the files in MySQL Workbench and found out that all (') had been replaced with (`)'s.
So after painstakingly replacing them, I tried to forward engineer again, but still the same gibberish was shown. I checked the code again and noticed that I'm getting this error, all the way through the code at 'x':
SET #OLD_UNIQUE_CHECKS=##UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET #OLD_FOREIGN_KEY_CHECKS=##FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET #OLD_SQL_MODE=##SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
CREATE SCHEMA IF NOT EXISTS 'x' DEFAULT CHARACTER SET latin1 ;
USE 'x' ;
-- -----------------------------------------------------
-- Table 'x'.'configuration'
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS 'x'.'configuration' (
'config_item' VARCHAR(64) NOT NULL DEFAULT '',
'config_value' VARCHAR(255) NOT NULL DEFAULT '')
ENGINE = MyISAM
DEFAULT CHARACTER SET = latin1;
Any idea what the heck I'm doing wrong?
#Sirko
Sooooo, like this?
SET #OLD_UNIQUE_CHECKS=##UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET #OLD_FOREIGN_KEY_CHECKS=##FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET #OLD_SQL_MODE=##SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
CREATE SCHEMA IF NOT EXISTS `x` DEFAULT CHARACTER SET latin1 ;
USE `x` ;
-- -----------------------------------------------------
-- Table `x`.`configuration`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `x`.`configuration` (
`config_item` VARCHAR(64) NOT NULL DEFAULT '',
`config_value` VARCHAR(255) NOT NULL DEFAULT '')
ENGINE = MyISAM
DEFAULT CHARACTER SET = latin1;
Try this:
CREATE TABLE IF NOT EXISTS `x`.`configuration` (
`config_item` VARCHAR(64) NOT NULL DEFAULT '',
`config_value` VARCHAR(255) NOT NULL DEFAULT '')
ENGINE = MyISAM
DEFAULT CHARACTER SET = latin1;

php mysql insert

I am pretty new in php programming and i'm facing with one trouble here. Probably it will be simple for all of you, but ok..
When i try to insert one row into mysql table named "novica" first time it works ok, but after that i'm unable to add any new row's. But when i delete this row, i can add one...but again, only one. I don't know what cause this.
here is my little php:
<?php
$con = mysql_connect("localhost","root","password");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("sola", $con);
mysql_query("INSERT INTO novica (naslov, vsebina, avtor, ustvarjeno) VALUES('$_POST[address]', '$_POST[content]', 'Klemen', NOW())");
mysql_close($con);
?>
And here is mysql export sql code:
-- phpMyAdmin SQL Dump
-- version 3.4.10.1deb1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Nov 22, 2012 at 06:41 PM
-- Server version: 5.5.28
-- PHP Version: 5.3.10-1ubuntu3.4
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET #OLD_CHARACTER_SET_CLIENT=##CHARACTER_SET_CLIENT */;
/*!40101 SET #OLD_CHARACTER_SET_RESULTS=##CHARACTER_SET_RESULTS */;
/*!40101 SET #OLD_COLLATION_CONNECTION=##COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Database: `sola`
--
-- --------------------------------------------------------
--
-- Table structure for table `novica`
--
CREATE TABLE IF NOT EXISTS `novica` (
`id_novica` int(10) NOT NULL,
`naslov` text COLLATE utf8mb4_bin NOT NULL,
`vsebina` text COLLATE utf8mb4_bin NOT NULL,
`avtor` text COLLATE utf8mb4_bin NOT NULL,
`ustvarjeno` date NOT NULL,
`posodobljeno` date DEFAULT NULL,
PRIMARY KEY (`id_novica`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
--
-- Dumping data for table `novica`
--
INSERT INTO `novica` (`id_novica`, `naslov`, `vsebina`, `avtor`, `ustvarjeno`, `posodobljeno`) VALUES
(0, 'a', 'a', 'Klemen', '2012-11-22', NULL);
/*!40101 SET CHARACTER_SET_CLIENT=#OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=#OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=#OLD_COLLATION_CONNECTION */;
Your primary key is not set to auto increment. As such when you insert a new row, the id of zero is possibly assigned, but any subsequent insert fails as that id is already taken.
Either add the id into the insert statement or make the id_novica auto increment - http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html
CREATE TABLE IF NOT EXISTS `novica` (
`id_novica` int(10) NOT NULL AUTO_INCREMENT,
`naslov` text COLLATE utf8mb4_bin NOT NULL,
`vsebina` text COLLATE utf8mb4_bin NOT NULL,
`avtor` text COLLATE utf8mb4_bin NOT NULL,
`ustvarjeno` date NOT NULL,
`posodobljeno` date DEFAULT NULL,
PRIMARY KEY (`id_novica`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
It always god to check error (mysql_error()) to find out what the problem. If that is problematic, display your query, execute by hand in console and check what error you get.
In general your primary key id_novica have to be unique, hence failure of subsequent inserts. You should either change values or define your primari key as AUTO_INCREMENT, to tell mysql to take care of dealing with this. So instead of
`id_novica` int(10) NOT NULL,
you shall have
`id_novica` int(10) NOT NULL AUTO_INCREMENT,
and in your INSERTS do not provide id_novica at all.
You also should not be using mysql_ exitension - it is deprecated. Switch to mysqli_ but if you are starting, jump directly to PDO instead
add unique id to your insert or update your id column to be automatically incremented:
ALTER TABLE `novica` CHANGE `id_novica` `id_novica` INT( 10 ) NOT NULL AUTO_INCREMENT

Categories