I wan't to insert rows in table with the precaution of sql-injection. I'am using below flexible mysql insert function which enters a record in given table. Is this the best approach I'm using or Is there any other approach to do the same? Thanks in advanced. <?php /** * This code writes data in database. It also takes care of sql injection case * * Entry function name : mainFunc * Entry function arguments : * $payload = [ * 'tableName' => 'table_name', * 'data' => ['column1_name' => column1_value, 'column2_name' => column2_value, etc] * ]; */ Class AddDBEntry { private $dbName; private $dbUserName; private $dbPassword; private $dbHost; private $mysqli; // $stmt = The SQL Statement Object // $param = Array of the Parameters public function dynamicBindVariables($stmt, $params) { if ($params != null) { // Generate the Type String (eg: 'issisd') $types = ''; foreach($params as $param) { if(is_int($param)) { // Integer $types .= 'i'; } elseif (is_float($param)) { // Double $types .= 'd'; } elseif (is_string($param)) { // String $types .= 's'; } else { // Blob and Unknown $types .= 'b'; } } // Add the Type String as the first Parameter $bind_names[] = $types; // Loop thru the given Parameters for ($i=0; $i<count($params); $i++) { // Create a variable Name $bind_name = 'bind' . $i; // Add the Parameter to the variable Variable $$bind_name = $params[$i]; // Associate the Variable as an Element in the Array $bind_names[] = &$$bind_name; } // Call the Function bind_param with dynamic Parameters call_user_func_array(array($stmt,'bind_param'), $bind_names); } return $stmt; } public function mainFunc($payLoad) { $tableName = $payLoad['tableName']; $data = $payLoad['data']; $this->mysqli = new mysqli($this->dbHost, $this->dbUserName, $this->dbPassword, $this->dbName); if ($this->mysqli->connect_errno) { echo "Failed to connect to MySQL: (" . $this->mysqli->connect_errno . ") " . $mysqli->connect_error; die(); } $stmtString = 'insert into ' . $tableName . ' (' . implode(', ', array_keys($data)) . ')' . ' values ' . '(' . str_repeat('?, ', count($data) - 1) . '?)'; $params = array_values($data); if (!($stmt = $this->mysqli->prepare($stmtString))) { echo "Unable to prepare statement"; // stop here, $stmt is not set, cannot continue die(); } $stmt = $this->dynamicBindVariables($stmt, $params); $stmt->execute(); if ($stmt->affected_rows <= 0) { echo "Error in insert"; } $stmt->close(); } }