2017-08-26 11 views
1

でプリペアドステートメントを使用してデータを提出した後、私はPDO接続でAJAXを使用してデータベースにデータを送信しようとしていましょうが、時にはデータがいつかない提出されています。私はAJAX応答を空にしています。 時々私は$mailbody=$_POST['mailbody'];を空にしています。私はページをリフレッシュし、再度投稿をクリックしてデータを投稿するとエラーがPDO接続

また、私はいくつかのエラーが発生しています。これで私を助けてくれますか?

<br /> 
<b>Fatal error</b>: Uncaught Error: Call to undefined method PDOStatement::bind_param() in C:\xampp\htdocs\fillter\process.php:23 
Stack trace: 
#0 C:\xampp\htdocs\demo\process.php(7): aus(Object(PDO)) 
#1 {main} 
    thrown in <b>C:\xampp\htdocs\demo\process.php</b> on line <b>23</b><br /> 

PDO接続

$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "dbname"; 
try { 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
    // set the PDO error mode to exception 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    //echo "Connected successfully"; 
    } 
catch(PDOException $e) 
    { 
    echo "Connection failed: " . $e->getMessage(); 
    } 

Process.php

date_default_timezone_set('Asia/Kolkata'); 
$date_of_added= date('d-m-Y H:i:s'); 

switch($_GET['key']) { 
case 'aus':aus($conn);break; 
default : redirect('index.php'); 
} 
function aus($conn){ 
$emailtemplate=$_POST['emailtemplate']; 
$subject=$_POST['subject']; 
$mailbody=$_POST['mailbody']; 
$country="AUS"; 
$email_status=0; 
global $date_of_added; 
$sql ="INSERT INTO request(bulkemails, subjects, mailbody, country, email_status, date_of_send) VALUES (?,?,?,?,?,?)"; 
//echo $sql; 
$stmt = $conn->prepare($sql); 
$stmt->bind_param("ssssis", $emailtemplate, $subject, $mailbody,$country, $email_status, $date_of_added); 
$stmt->execute(); 
$stmt->close(); 
$conn->close(); 
} 

のAjax

$(function() { 
    $("form[name='bulkmailsend']").validate({ 
     // Specify the validation rules 
     rules: { 
      emailtemplate:{ 
       required: true, 
      }, 
      subject: { 
       required: true} 
       }, 
     submitHandler: function(form) { 
      //form.submit(); 
     var emailtemplate = $('#emailtemplate').val(); 
     var subject = $('#subject').val(); 
     var mailbody = $('#editor11').val(); 
     //alert(mailbody); 
      $.ajax(
      { 
       url:'process.php?key=aus', 
       type:'POST', 
       data:{ 
        'emailtemplate':emailtemplate, 
        'subject':subject, 
        'mailbody':mailbody 
       }, 
       success:function(data) 
       { 
        alert(data); 
       }, 
      }); 
     } 
    }); 

    }); 

HTML

<form action="" method="post" name="bulkmailsend" id="bulkmailsend"> 
    <textarea name="emailtemplate" placeholder="Enter email" id="emailtemplate"></textarea> 
    <input type="text" name="subject" placeholder="Subject" id="subject"> 
    <textarea name="mailbody" id="editor11"></textarea> 
    <input type="submit" name="addmail" id="addmail" value="Send"> 
</form> 

答えて

0

あなたはパラメータを結合するためのMySQLiの構文を使用しますが、データベースに接続するために、PDO構文を使用。 Call to undefined method PDOStatement::bind_param()というエラーが発生する理由は、そのメソッドがPDOではなくMySQLi(bind_param)に存在するためです。 PDOを使用する場合は、バインドパラメータbindParamの正しい構文を確認してください。また

は、それに応じてスクリプトを変更してみてください。 1つの方法は、名前付きプレースホルダを使用することです。

$sql ="INSERT INTO request(bulkemails, subjects, mailbody, country, email_status, date_of_send) VALUES (:mailTemplate,:subject,:mailbody,:country,:email_status,:date_of_added)"; 
//echo $sql; 
$stmt = $conn->prepare($sql); 
$stmt->bindParam(':mailTemplate', $emailtemplate, PDO::PARAM_STR); 
$stmt->bindParam(':subject', $subject, PDO::PARAM_STR); 
$stmt->bindParam(':mailbody', $mailbody, PDO::PARAM_STR); 
$stmt->bindParam(':country', $country, PDO::PARAM_STR); 
$stmt->bindParam(':email_status', $email_status, PDO::PARAM_INT); 
$stmt->bindParam(':date_of_added', $date_of_added, PDO::PARAM_STR); 
$stmt->execute(); 
// exiting 
$stmt = null; 
$conn = null; 

もう1つの方法は疑問符プレースホルダを使用することです。

$sql ="INSERT INTO request(bulkemails, subjects, mailbody, country, email_status, date_of_send) VALUES (?,?,?,?,?,?)"; 
//echo $sql; 
$stmt = $conn->prepare($sql); 
$stmt->bindParam(1, $emailtemplate, PDO::PARAM_STR); 
$stmt->bindParam(2, $subject, PDO::PARAM_STR); 
$stmt->bindParam(3, $mailbody, PDO::PARAM_STR); 
$stmt->bindParam(4, $country, PDO::PARAM_STR); 
$stmt->bindParam(5, $email_status, PDO::PARAM_INT); 
$stmt->bindParam(6, $date_of_added, PDO::PARAM_STR); 
$stmt->execute(); 
// exiting 
$stmt = null; 
$conn = null; 
+0

私のために働いています。ありがとう、Mr.Peter –

0

パラメータをバインドするために以下の機能を試すことができます。

<?php 

$sql = "INSERT INTO request(bulkemails, subjects, mailbody, country, email_status, date_of_send) VALUES (?,?,?,?,?,?)"; 
$stmt = $conn->prepare($sql); 
$stmt->bindParam(1, $emailtemplate, PDO::PARAM_STR); 
$stmt->bindParam(2, $subject, PDO::PARAM_STR); 
$stmt->bindParam(3, $mailbody, PDO::PARAM_STR); 
$stmt->bindParam(4, $country, PDO::PARAM_STR); 
$stmt->bindParam(5, $email_status, PDO::PARAM_STR); 
$stmt->bindParam(6, $date_of_added, PDO::PARAM_STR); 
?>