I don't understand what is wrong with the code below. Everything seems fine but I'm still getting a notice:
Notice: Undefined variable: sql in C:\xampp\htdocs\w3s\createtablepdo.php on line 27 " and error could not find driver.
<?php
$servername="localhost";
$username="root";
$password="";
$dbname="mysql";
try
{
//creating connection
$conn = new PDO("mysqli:host=$servername;dbname=$dbname",$username,$password);
//checking exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// sql to create table
$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
)";
//use exec cos no result are returned
$conn->exec($sql);
echo "table MyGuests created succesfully";
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
?>
I guess you are following this tutorial for creating new table using PDO. If you see the code on the link carefully, you will need to change the line
$conn = new PDO("mysqli:host=$servername;dbname=$dbname",$username,$password);
to following
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
See this link for PDO Connections and Connection management
Update / changed answer: I misread this error; apparently it's been some time since I've worked with PHP. Apparently this is not an issue of scope (I thought $sql
was undefined outside of try {...}
). Instead, the problem must be that $sql
is never defined because you never reach the line that defines it.
Either way, the solution should be the same:
try
{
// Assume something goes wrong here
// You define $sql here, so this is from where it is valid:
$sql = "CREATE TABLE ...";
}
catch(PDOException $e)
{
// This is where your error comes from, but since you never
// reached the line where $sql was defined before jumping
// into the Catch section, $sql is still undefined here:
echo $sql . "<br>" . $e->getMessage();
}
Solution: Define $sql
outside the whole try-catch clause:
$sql = ""; // empty is fine.
try
{
// Assume something goes wrong here
$sql = "CREATE TABLE ...";
}
catch(PDOException $e)
{
// Now $sql will just be empty if errors occur before
// your query code is defined:
echo $sql . "<br>" . $e->getMessage();
}
Once you fix this, you should be able to see what the real error is - the one that is hidden due to the undefined $sql
messing up your error message.
The issue is, its mysql PDO not mysqli PDO. Try :
$conn = new PDO("mysql:host=$servername;dbname=$dbname",$username,$password);