I'm getting this error when trying to do an insert in the database with PDO:
> > <br /> <b>Fatal error</b>: Uncaught PDOException: SQLSTATE[HY000]: General error: mode must be an integer in
> C:\Users\Usuário.NB-0307\Documents\Site\Admin
> 2\db\enviarexercicio.php:51 Stack trace:
> #0 C:\Users\Usuário.NB-0307\Documents\Site\Admin 2\db\enviarexercicio.php(51): PDO->query('INSERT INTO tb_...',
> Array)
> #1 {main} thrown in <b>C:\Users\Usuário.NB-0307\Documents\Site\Admin 2\db\enviarexercicio.php</b> on line <b>51</b><br />
I can not find what's causing it, I'm using this class to connect to a bank:
<?php
/**
* Classe de conexão ao banco de dados usando PDO no padrão Singleton.
* Modo de Usar:
* require_once './Database.class.php';
* $db = Database::conexao();
* E agora use as funções do PDO (prepare, query, exec) em cima da variável $db.
*/
class Database
{
# Variável que guarda a conexão PDO.
protected static $db;
# Private construct - garante que a classe só possa ser instanciada internamente.
private function __construct()
{
# Informações sobre o banco de dados:
$db_host = "******";
$db_nome = "*****";
$db_usuario = "****";
$db_senha = "****";
$db_driver = "***";
# Informações sobre o sistema:
$sistema_titulo = "***";
$sistema_email = "*****";
try
{
# Atribui o objeto PDO à variável $db.
self::$db = new PDO("$db_driver:host=$db_host; dbname=$db_nome", $db_usuario, $db_senha);
# Garante que o PDO lance exceções durante erros.
self::$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
# Garante que os dados sejam armazenados com codificação UFT-8.
self::$db->exec('SET NAMES utf8');
}
catch (PDOException $e)
{
# Envia um e-mail para o e-mail oficial do sistema, em caso de erro de conexão.
mail($sistema_email, "PDOException em $sistema_titulo", $e->getMessage());
# Então não carrega nada mais da página.
die("Connection Error: " . $e->getMessage());
}
}
# Método estático - acessível sem instanciação.
public static function conexao()
{
# Garante uma única instância. Se não existe uma conexão, criamos uma nova.
if (!self::$db)
{
new Database();
}
# Retorna a conexão.
return self::$db;
}
}
And it works normal when I select, but when I try to insert the error
<?php
require_once './Database.class.php';
$db = Database::conexao();
date_default_timezone_set('America/Sao_Paulo');
$errors = array(); //To store errors
$form_data = array(); //Pass back the data to 'form.php'
/* Validate the form on the server side */
if (empty($_POST['Enunciado'])) {
$errors['erro'] = 'EnunciadoName cannot be blank';
}
if (empty($_POST['Pergunta'])) {
$errors['erro'] = 'Pergunta cannot be blank';
}
if (empty($_POST['resposta1'])) {
$errors['erro'] = 'resposta1 cannot be blank';
}
if (empty($_POST['resposta2'])) {
$errors['erro'] = 'resposta2 cannot be blank';
}
if (empty($_POST['resposta3'])) {
$errors['erro'] = 'resposta3 cannot be blank';
}
if (empty($_POST['respostacorreta'])) {
$errors['erro'] = 'respostacorreta cannot be blank';
}
if (empty($_POST['unidade'])) {
$errors['erro'] = 'unidade cannot be blank';
}
if (!empty($errors)) { //If errors in validation
$form_data['success'] = false;
$form_data['erros'] = $errors;
}
else { //If not, process the form, and return true on success
$Enunciado = $_POST['Enunciado'];
$Pergunta = $_POST['Pergunta'];
$resposta1 = $_POST['resposta1'];
$resposta2 = $_POST['resposta2'];
$resposta3 = $_POST['resposta3'];
$respostacorreta = $_POST['respostacorreta'];
$unidade = $_POST['unidade'];
$resultado = $db->query("INSERT INTO tb_exercicios(enunciado,pergunta,resposta1,resposta2,resposta3,respostacorreta,unidade) VALUES(:ENUNCIADO, :PERGUNTA, :RESPOSTA1, :RESPOSTA2, :RESPOSTA3, :RESPOSTACORRETA, :UNIDADE)",array(
":ENUNCIADO"=>$Enunciado,
":PERGUNTA"=>$Pergunta,
":RESPOSTA1"=>$resposta1,
":RESPOSTA2"=>$resposta2,
":RESPOSTA3"=>$resposta3,
":RESPOSTACORRETA"=>$respostacorreta,
":UNIDADE"=>$unidade
));
if($resultado){
$form_data['success'] = true;
$form_data['enviado'] = 'Cadastrado';
}else{
$form_data['success'] = false;
$errors['erro'] = 'Erro ao fazer o cadastro no banco';
$form_data['erros'] = $errors;
}
}
//Return the data back to form.php
echo json_encode($form_data);
?>