Estou com uma api para inserir no banco mysql, minha função está da seguinte forma:
public function store()
{
global $app;
$dados = json_decode($app->request->getBody(), true);
$dados = (sizeof($dados) == 0) ? $_POST : $dados;
$keys = array_keys($dados); //Paga as chaves do array
/*
O uso de prepare e bindValue é importante para se evitar SQL Injection
*/
$sth = $this->PDO->prepare(“INSERT INTO users (” . implode(’,’, $keys) . “) VALUES (:” . implode(",:", $keys) . “)”);
foreach ($dados as $key => $value) {
$sth->bindValue(’:’ . $key, $value);
}
$sth->execute();
//Retorna o id inserido
$app->render(‘default.php’, [“data” => [‘id’ => $this->PDO->lastInsertId()]], 200);
}
Quando eu faço o teste pelo postman ele me retorno o erro:
Slim Application Error
The application could not run because of the following error:
Details
Type: PDOException
Code: 42000
Message: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':)' at line 1
File: C:\wamp64\www\api-slim\controllers\Users.php
Line: 68
Trace
#0 C:\wamp64\www\api-slim\controllers\Users.php(68): PDOStatement->execute()
#1 C:\wamp64\www\api-slim\index.php(22): controllers\Users->store()
#2 [internal function]: {closure}()
#3 C:\wamp64\www\api-slim\vendor\slim\slim\Slim\Route.php(468): call_user_func_array(Object(Closure), Array)
#4 C:\wamp64\www\api-slim\vendor\slim\slim\Slim\Slim.php(1355): Slim\Route->dispatch()
#5 C:\wamp64\www\api-slim\vendor\slim\slim\Slim\Middleware\Flash.php(85): Slim\Slim->call()
#6 C:\wamp64\www\api-slim\vendor\slim\slim\Slim\Middleware\MethodOverride.php(92): Slim\Middleware\Flash->call()
#7 C:\wamp64\www\api-slim\vendor\slim\slim\Slim\Middleware\PrettyExceptions.php(67): Slim\Middleware\MethodOverride->call()
#8 C:\wamp64\www\api-slim\vendor\slim\slim\Slim\Slim.php(1300): Slim\Middleware\PrettyExceptions->call()
#9 C:\wamp64\www\api-slim\index.php(69): Slim\Slim->run()
#10 {main}
Alguém pra ajudar a identificar esse erro?