Keithsoulasa
Keithsoulasa

Reputation: 55

Call to a member function execute() on a non-object , PHP/SQL

what the following is supposed to do , is grab the title of the table we want to create from an HTML form, for now I hard coded the value of that ... But even with a hard coded value i'm getting the following error . Connected to database Fatal error: Call to a member function execute() on a non-object in 'filepath'.php on line 44

    <?php

            // Configuration
            $hostname = 'host';
            $username = 'user';
            $password = 'pass';
            $database = 'dbname';

            $table = $_Post['table'];
        try {
            $conn = new PDO('mysql:host='. $hostname .';dbname='. $database, $username, $password);
    echo "Connected to database"; // check for connection
    echo $table;
    // We get the connected to database message....
$conn->exec("SET CHARACTER SET utf8");      // Sets encoding UTF-8
 // table A is going to be a var , but for now testing with a hardcoded value 
  $sql = "CREATE TABLE tableA (
  id int(8) ,
  Question varchar(170),
  AnswerA varchar(100),
  AnswerB varchar(100),
  AnswerC varchar(100),
  AnswerD varchar(100),
  A int(8),
  B int (8), 
  C int (8) , 
  D int (8)
  ) CHARACTER SET utf8 COLLATE utf8_general_ci";

  $sqlb = "INSERT INTO `DBNAME` tableA (`id`, `Question`, `AnswerA`, `AnswerB`, `AnswerC`, `AnswerD`, `A`, `B`, `C`, `D`) 
  VALUES ('1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), 
  ('2', NULL,  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), 
  ('3', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
  ('4', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
  ('5', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), 
  ('6', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), 
  ('7', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
  ('8', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), 
  ('9', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
  ('10', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)";
  // lets not do it all at once eh , run a secound script to add in all the values 



 $sql->execute(); 
 $sqlb->execute(); 
 // if($conn->exec($sql) !== false) echo 'The sites table is created';  
//if($conn->exec($sqlb) !== false) echo 'We inserted some values !';  


}
catch(PDOException $e)
    {
    echo $e->getMessage();
    }
//  }
// write code to check if we succeded in creating a table with with $, if so display an alert of of some kind
// with Javascript ....

// disabled the redirect so i could see the error message
//header ("Location: quizsubmit.html");
/* Make sure that code below does not get executed when we redirect. */
exit ;



?>

Upvotes: 1

Views: 13259

Answers (4)

mihaita25
mihaita25

Reputation: 1751

I had the same error...

I was selecting a table that didn't exist. My error.

Upvotes: 0

rdo
rdo

Reputation: 3982

As says above you can call prepare that returns PDOStatement and then call execute or just call exec for PDO object. 1)

$stmt = $conn->prepare($sql);
$stmtb = $conn->prepare($sqlb);

$stmt->execute();
$stmtb->execute();

2)

$pdoObj = new PDO('mysql:host='. $hostname .';dbname='. $database, $username, $password);
$pdoObj->exec($sql);

Upvotes: 0

xdazz
xdazz

Reputation: 160833

You are calling ->execute() on a string, how should it work? You need to use prepare() method to create a statement object.

Upvotes: 0

cdhowie
cdhowie

Reputation: 169008

The $sql and $sqlb variables contain strings, not PHP objects. They don't have an execute() method.

You need to prepare the queries first, then you can execute the resulting statement object:

$stmt = $conn->prepare($sql);
$stmtb = $conn->prepare($sqlb);

$stmt->execute();
$stmtb->execute();

Upvotes: 7

Related Questions