2017-07-05 22 views
-1

なぜこの準備文が偽を返してもエラーを出さない理由についての手掛かりはありません。私はStackOverflow上で同様の質問を読んだことがありますが、この未知の問題を解決するためのヒントは見つかりませんでした。PDOの準備文が挿入されていない

エラーがこれはAJAXリクエストを処理するPHPファイルである

public function PDOconn() { 
    try { 
     return new PDO($this->getDsn(), $this->username, $this->password, [PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION]); 
    } catch (PDOException $e) { 
     echo "Errore di connessione al database"; 
     throw $e->getCode(); 
    } 
} 

を活性化します。私はtry {} ... catch()にクエリを挿入しましたが、実際には何のエラーも報告しないので助けにはなりませんでした。​​はちょうどfalse

/* ***** CLASSES AUTOLOAD fn ***** */ 
spl_autoload_register(function ($class_name) { 
    require_once '../classes/' . $class_name . '.php'; 
}); 

$db  = new database(); 
$conn = $db->PDOconn(); 


$name = postGet::post('name'); 
$email = postGet::post('email'); 
$commercial = postGet::post('commercial'); 


try { 
    $stmt = $conn->prepare('INSERT INTO newsletter_subscription(name, email, commercial) VALUES(:name, :email, :commercial)'); 
    $stmt->execute(array(':name' => $name, ':email' => $email, ':commercial' => $commercial)); 
} catch (PDOException $e) { 
    $return = $e->getCode(); 
} 

header('Content-Type: application/json; charset=utf-8'); 
echo json_encode($return); 

を返す変数string $namestring $emailint $commercialが正しく渡され、私は、PHPファイルにそれらを印刷しました。

これはsubscriptorIDはPRIMARY AIと電子メールは私に、私の短いメモリ上 enter image description here

[SOLUTION]恥UNIQUEですが、多分それは他の誰かを助けることができるテーブル構造である:私はフラッシュを持っていましたそのDBユーザーにはINSERT特権がありませんでした。そのため、クエリはエラーなしで偽を返すのです。

+1

エラーメッセージが表示されますか? – RiggsFolly

答えて

-1

bool $commercialは、ブール値ではなく整数として渡されます。あなたのSQLでそれをTrueまたはFalse

+0

それは私のせいで、int int commercialです。しかし、とにかく、私が知る限り、MySQLの 'INT(1)'は 'BOOLEAN'と考えられます。 – Brigo

+0

それを削除し、それが問題かどうかを確認してください。 – Grasper

0

のAhに変更してください。commercialはブール値です。

このパラメータを渡す方法を使用すると、パラメータはすべて文字列とみなされます。

$stmt->execute(array(':name' => $name, ':email' => $email, ':commercial' => $commercial)); 

ブール値の場合は、このような値をバインドする必要があります。

$stmt->bindValue(':name', $name, PDO::PARAM_STR); 
$stmt->bindValue(':email', $email, PDO::PARAM_STR); 
$stmt->bindValue(':commercial', $commercial, PDO::PARAM_BOOL); 

$stmt->execute(); 
+0

私のせいで、 '$ commercial'は' int'になりました。私はとにかく手動で(PDO :: PARAM_INT'で)手作業でバインドしようとしましたが、それでも動作せず、エラーメッセージも表示されません – Brigo

関連する問題