Insert data into MySql DB

2019-08-29 12:35发布

问题:

I'm creating a class and I have a function with which I want to insert some data into an table from some inputs. It works if I check the table but I keep getting the error "number of arguments in prepare doesn't match the no of arg in bind_result". Also I don't know if my method is correct ..

private function insertData($foldName,$foldClass,$foldLink) {

    $sql = "INSERT INTO folders (folder_name,folder_class,folder_link) VALUES ('$foldName','$foldClass','$foldLink')";

    if($stmt = $this->connect->prepare($sql)) {
        $stmt->execute();
        $stmt->bind_result($foldName,$foldClass,$foldLink);
        $stmt->close();
        $error = false;
        $message['error'] = false;
        $message['message'] = "Data Successfuly Inserted";
        return json_encode($message);
    }
        else {
            $error = true;
            $message['error'] = true;
            $message['message'] = "Data Failed To Insert";
            return json_encode($message);
        }

}

回答1:

You don't need bind_result at all as you are inserting data and not selecting any.

But you should use the core features of your prepared statement. That is: safely passing the variables to the statement object instead of inserting their "raw" values into the SQL string:

$sql = "INSERT INTO folders (folder_name,folder_class,folder_link) VALUES (?,?,?)";
$stmt = $this->connect->prepare($sql);
$stmt->bind_param("sss", $foldName, $foldClass, $foldLink);
$stmt->execute();

(I have not tested it.)



回答2:

Look at the first example on this manual page: http://php.net/manual/en/mysqli-stmt.bind-param.php



回答3:

If you are emptying the table's data as a whole, use the truncate query:

TRUNCATE TABLE `table_name`

This would reset the auto_increment to 1, but if you don't want to empty the whole table you can alter it instead:

ALTER TABLE `table_name` auto_increment = 1