2016-07-11 6 views
0

データベースにデータを追加しようとしていますが、PDOの準備/実行ステートメントでこれを正しく行う方法がわかりません。私のHTMLファイルにAngularJS、PHP、およびMySQL:PDOを使用して変数を正しく挿入する方法は?

、私は、このボタンのコールを持っている:

私のコントローラに行く
<form name="addRecord" method="POST"> 
    <button data-ng-click="addNewRecord()" name="add">Add Record</button> 
</form> 

:で

<?php 
    if(isset($_POST['add'])) 
    { 
     try { 
      $db = new PDO('mysql:host=localhost;dbname=myDBNAME;charset=utf8', 
          'myDBUSER', 
          'myDBPASS'); 
      $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); 
      $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
     } 
     catch(PDOException $ex) { 
      echo "did not connect..."; 
     } 

     $sth = $db->prepare("INSERT INTO my_db_table 
          (tcode, created_on, email, move_in_date, move_in_hour, move_in_minute, version) 
          VALUES (?, ?, ?, ?, ?, ?, ?)"); 

     $data = json_decode(file_get_contents("php://input")); 
     $sth->bindValue(1, $data->id); 
     $sth->bindValue(2, $data->createdon); 
     $sth->bindValue(3, $data->email); 
     $sth->bindValue(4, $data->date); 
     $sth->bindValue(5, $data->hour); 
     $sth->bindValue(6, $data->minute); 
     $sth->bindValue(7, $data->version); 

     $success = $sth->execute(); 
     Print $success; 
    } 
?> 

:私のPHPファイルを呼び出す

app.controller('DateHoursController', function ($scope, $http) { 
    var date = 456; 
    var hours = 5; 
    var minutes = 45; 
    var cid = 'jk7814982'; 
    var em = '[email protected]'; 
    var versionN = 0; 

    $scope.addNewRecord = function() { 
     var today = Date.now(); 

     $http.post("server/insert.php", { 'id': cid, 'createdon': today, 'email': em, 'date': date, 'hour': hours, 'minute': minutes, 'version': versionN }) 
      .success(function (data, status, headers, config) { 
       console.log("inserted Successfully"); 
      }); 
    }; 
}); 

コンソールで、「挿入が成功しました」と表示され、ブラウザのネットワークをチェックして、「insert.php」をクリックするとステータス200が表示されますが、空の応答。

ここで何か忘れていますか?私はこれが失敗する原因を理解していません。

+1

なぜあなたは 'mysql_real_escape_string'をPDOで使用していますか? –

+0

準備された文を使用します。 – Sirko

+0

この回答のため@ don'tpanic:@stackoverflow.com/questions/20004325/inserting-data-from-front-end-to-mysql-db-in-angularjs – NoReceipt4Panda

答えて

2

値をバインドする前に、mysql_real_escape_string、またはその他のエスケープ機能を使用しないでください。

$sth = $db->prepare("INSERT INTO my_db_table 
      (tcode, created_on, email, move_in_date, move_in_hour, move_in_minute, version) 
      VALUES (?, ?, ?, ?, ?, ?, ?)"); 

バインドプリペアドステートメントに値:

$sth->bindValue(1, $data->id); 
$sth->bindValue(2, $data->createdon); 
$sth->bindValue(3, $data->email); 
$sth->bindValue(4, $data->date); 
$sth->bindValue(5, $data->hour); 
$sth->bindValue(6, $data->minute); 
$sth->bindValue(7, $data->version); 

プリペアドステートメントを実行する

は、現在お使いの値を挿入するプレースホルダをして、文を準備します。

$success = $sth->execute(); 

$successexecuteが成功したかどうかを示します。

+1

これは良いデモンストレーションですが、 ':tcode'のような名前のプレースホルダーは* super * usefulであり、これはずっと面倒ではありません。 – tadman

+0

@tadman表示できますか? – NoReceipt4Panda

+0

私は先に進んであなたのソリューションを使用しましたが、コンソールで成功メッセージが表示されますが、データベースにデータが追加されていません。 – NoReceipt4Panda

関連する問題