0

オブジェクト/クラスで再び立ち往生。新しい行をチケット テーブルに送信する submitticket という関数があります。

public function submitticket() {
    $correct = false;
    try {
        $con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
        $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
        $sql = "INSERT INTO tickets (ticketid, EPMSAccount, requester, recipient, jobnumber, subject, body, responseid, type, priority) VALUES (:ticketid, :EPMSAccount, :requester, :recipient, :jobnumber, :subject, :body, :responseid, :type, :priority)";
        $stmt = $con->prepare( $sql );
        //print_r($sql);
        $stmt->bindValue( "ticketid", $this->ticketid, PDO::PARAM_STR );
        $stmt->bindValue( "EPMSAccount", $this->EPMSAccount, PDO::PARAM_STR );
        $stmt->bindValue( "requester", $this->requester, PDO::PARAM_STR );
        $stmt->bindValue( "recipient", $this->recipient, PDO::PARAM_STR );
        $stmt->bindValue( "jobnumber", $this->jobnumber, PDO::PARAM_STR );
        $stmt->bindValue( "subject", $this->subject, PDO::PARAM_STR );
        $stmt->bindValue( "body", $this->body, PDO::PARAM_STR );
        $stmt->bindValue( "responseid", $this->responseid, PDO::PARAM_STR );
        $stmt->bindValue( "type", $this->type, PDO::PARAM_STR );
        $stmt->bindValue( "priority", $this->priority, PDO::PARAM_STR );
        echo '<pre>';
        print_r($stmt);
        echo '</pre>';
        $stmt->execute();


        return "Ticket created!";

    }catch( PDOException $e ) {
        return $e->getMessage();
    }

これは私のコードでそれを実行する方法です:

// Submit ticket if submit clicked
if($_POST['submit'] == 'Submit Ticket'){
    $_POST['requester'] = $_SESSION['name'];
    $_POST['EPMSAccount'] = $_SESSION['EPMSAccount'];
    $tkt = new Ticket; // New instance of ticket class
    $tkt->storeFormValues( $_POST );
    $tkt->storeFormValues( $_SESSION );
    $tkt->submitticket();
    echo '<pre>';
    var_dump($tkt);
    print_r ($stmt);
    echo '</pre>';

} else {
echo 'nothing attempted';
}

このクエリは正しいはずですが、テーブルに何も書き込んでいません。var_dump と print_r が私に与えているものは次のとおりです。

PDOStatement Object
(
[queryString] => INSERT INTO tickets (ticketid, EPMSAccount, requester, recipient, jobnumber, subject, body, responseid, type, priority) VALUES (:ticketid, :EPMSAccount, :requester, :recipient, :jobnumber, :subject, :body, :responseid, :type, :priority)
)
object(Ticket)#2 (12) {
["ticketid"]=>
NULL
["EPMSAccount"]=>
string(7) "SHAWMUT"
["jobnumber"]=>
string(6) "123456"
["estnumber"]=>
NULL
["requester"]=>
string(14) "Gabriel Peluso"
["recipient"]=>
string(16) "Customer Service"
["subject"]=>
string(4) "2323"
["body"]=>
string(5) "23232"
["order"]=>
NULL
["responseid"]=>
NULL
["type"]=>
NULL
["priority"]=>
string(6) "Normal"
}

バインドされた PDO 値を使用して実際の SQL クエリを表示する方法がわかりません。それを製品化することは可能ですか?なぜテーブルに書き込まないのかを知る方法はありますか?

4

2 に答える 2

1

設定されていないこと、また を返さないこと$stmtを確認してください。false$stmt->execute();false

その場合はerrorInfo()、PDO 接続とステートメントの両方で使用できるメソッドを使用してデバッグします。

于 2013-01-16T14:39:45.353 に答える
1

戻り値 (成功メッセージまたは例外メッセージ) で実際には何もしていません。

何が起こっているかを確認するには、次のように変更できます。

$tkt->submitticket();

に:

echo $tkt->submitticket();

それとは別に、$stmtは関数内のローカル変数であるため、その内容を表示したい場合var_dumpは、関数自体でそれを行う必要があります。

于 2013-01-16T14:41:22.727 に答える