GVillani82
GVillani82

Reputation: 17429

Issue inserting data using mysqli in MySQL

I try to use mysqli in order to insert data in my database. But does not work. Where may be the error?

$myDb = new mysqli($hostname, $username, $password, $database);

if($myDb->connect_errno > 0){
    die('Unable to connect to database [' . $myDb->connect_error . ']');
}

$statment = $myDb->prepare("INSERT INTO user(name,surname,age)
VALUES (?,?,?)");
  $statement->bind_param('s', $_POST['name']);
  $statement->bind_param('s', $_POST['surname']);
  $statement->bind_param('i', 25);


  $statement->execute();

  $statement->free_result();

EDIT:

I obtain this error:

Binding parameters failed: (0) Execute failed: (2031) No data supplied for parameters in prepared statement

Upvotes: 1

Views: 1335

Answers (2)

Replica
Replica

Reputation: 21

You've got the error here:

$statement->bind_param('i', 25);

25 is not a variable. You can only use variables when binding parameters. You can't use constants nor fixed strings or numbers when binding.

Besides, it never worked for me to split the parameters when binding. I got an error. I need to do so:

$myDb = new mysqli($hostname, $username, $password, $database);

if($myDb->connect_errno > 0){
    die('Unable to connect to database [' . $myDb->connect_error . ']');
}

$statement = $myDb->prepare("INSERT INTO user (name,surname,age) VALUES (?,?,25)");
$statement->bind_param('ss', $_POST['name'], $_POST['surname']);

$statement->execute();

$statement->free_result();
$statement->close();

Upvotes: 2

GVillani82
GVillani82

Reputation: 17429

I solved the problem using a correct bind of parameter. Here the correct code:

$myDb = new mysqli($hostname, $username, $password, $database);

if($myDb->connect_errno > 0){
    die('Unable to connect to database [' . $myDb->connect_error . ']');
}

$statment = $myDb->prepare("INSERT INTO user(name,surname,age)
VALUES (?,?,?)");
  $statement->bind_param('s', $name);
  $statement->bind_param('s', $surname);
  $statement->bind_param('i', $age);

$name = $_POST['name'];
$surname = $_POST['surname'];
$age  = 25;


  $statement->execute();

  $statement->free_result();

Upvotes: -1

Related Questions