Search code examples
phpmysqliprepared-statementbindparam

Mysqli bind parameters not working


I'm trying to use prepared statements to enter data in a database. The unprepared statement works but this prepared statement does not. I can't find out why. Prepared version:

$stmt = $mysqli->prepare("INSERT INTO videos (file_name, upload_by, date, path) 
VALUES (?, ?, ?, ?)");
$stmt->bind_param('ssss', $newstring, $id, $date->format('Y-m-d'), $location);
$stmt->execute();

Unprepared version:

  $sql = "INSERT INTO videos (file_name, upload_by, date, path) VALUES ('$newstring', '$id', '
          $date', 'Nominator/$location$newstring')";
  mysqli_query($mysqli, $sql);

Solution

  • Replace $stmt-execute(); with $stmt->execute();

    Also, don't use date and path in query. Rename them with some other name like date1 and path1.

    Update your Query like below that will surely work (Tested Offline):

    <?php
    $mysqli = new mysqli('localhost', 'root', '', 'test2'); 
    
    if ($mysqli->errno) {
    printf("Connect failed: %s\n", $mysqli->error);
    exit();
    }
    
    $stmt = $mysqli->prepare("INSERT INTO videos (file_name, upload_by, date1, path1) VALUES (?, ?, ?, ?)");
    $stmt->bind_param('ssss', $file_name, $upload_by, $date1, $path1);
    $date1 = date("Y-m-d");
    $file_name = "test.jpg";
    $upload_by = "amit";
    $path1 = "test";
    if ($result = $stmt->execute()){
    echo "success";
    $stmt->free_result();
    } else {
    echo "error";
    }
    $stmt->close();
    ?>