Zach Starnes
Zach Starnes

Reputation: 3198

mysqli multi query not executing the queries

I am trying to execute 3 queries to create tables within a database but it will not execute the query giving me a syntax error. Can anyone look at this code and tell me what I typed wrong to make this work? I have tried everything and I can not get the queries to execute!

$dh = mysqli_connect($_POST['hostname'], $_POST['username'], $_POST['password'],           $_POST['database']);
if(! $dh )
{
  die('Could not connect: ' . mysql_error());
}
echo "Connected successfully...<br /><br />";

$query = "CREATE TABLE IF NOT EXISTS `content` (
               `content_id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
               `section_id` INT(11) NOT NULL,
               `header` VARCHAR(255) NOT NULL,
               `sub_header` VARCHAR(255) NOT NULL,
               `date_range` VARCHAR(64) NOT NULL,
               `content_body` TEXT NOT NULL
              ) ENGINE=InnoDB DEFAULT CHARSET=latin1";

$query .= "CREATE TABLE IF NOT EXISTS `sections` (
               `section_id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
               `title` VARCHAR(255) NOT NULL,
               `position` INT(11) NOT NULL
              ) ENGINE=InnoDB DEFAULT CHARSET=latin1";

$query .= "CREATE TABLE IF NOT EXISTS `sections` (
               `user_id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
               `username` VARCHAR(32) NOT NULL,
               `password` VARCHAR(32) NOT NULL,
               `first_name` VARCHAR(32) NOT NULL,
               `last_name` VARCHAR(32) NOT NULL,
               `email` VARCHAR(1024) NOT NULL
              ) ENGINE=InnoDB DEFAULT CHARSET=latin1";

$retval = mysqli_multi_query($dh, $query);

Upvotes: 1

Views: 735

Answers (2)

rvs
rvs

Reputation: 1291

You are missing semicolons between queries.

So you are trying to execute something like this: <...> ENGINE=InnoDB DEFAULT CHARSET=latin1CREATE TABLE <...>

Upvotes: 1

fullybaked
fullybaked

Reputation: 4127

You don't have semi colons between the queries and you are joining them all together and running at once.

If you are running multiple queries like that you need semicolons at the end of each query

$query = "CREATE TABLE IF NOT EXISTS `content` (
               `content_id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
               `section_id` INT(11) NOT NULL,
               `header` VARCHAR(255) NOT NULL,
               `sub_header` VARCHAR(255) NOT NULL,
               `date_range` VARCHAR(64) NOT NULL,
               `content_body` TEXT NOT NULL
              ) ENGINE=InnoDB DEFAULT CHARSET=latin1;";

$query .= "CREATE TABLE IF NOT EXISTS `sections` (
               `section_id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
               `title` VARCHAR(255) NOT NULL,
               `position` INT(11) NOT NULL
              ) ENGINE=InnoDB DEFAULT CHARSET=latin1;";

$query .= "CREATE TABLE IF NOT EXISTS `sections` (
               `user_id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
               `username` VARCHAR(32) NOT NULL,
               `password` VARCHAR(32) NOT NULL,
               `first_name` VARCHAR(32) NOT NULL,
               `last_name` VARCHAR(32) NOT NULL,
               `email` VARCHAR(1024) NOT NULL
              ) ENGINE=InnoDB DEFAULT CHARSET=latin1;";

Upvotes: 1

Related Questions