2

これは、PDO更新ステートメントを作成する正しい方法ですか?私はオンラインで見たチュートリアルに基づいていますが、AJAXによって起動されたときは何もしていないようです(AJAXリクエストがコンソールで成功としてログに記録されていても、データベースは更新されません):

$duedate = $_POST["duedate"];
$status = $_POST["status"];
$id = $_POST["id"];

$sql = "UPDATE pm_schedule SET duedate=?, status=? WHERE id=?";
$q = $pdo->prepare($sql);
$q->execute(array($duedate,$status,$id));
4

3 に答える 3

5

はい、それは正しいですが、エラー時にエラーを発生させるようにPDOに指示する必要があります。
したがって、接続コードは次のようにします。

$dsn = "mysql:host=$host;dbname=$db;charset=utf8";
$opt = array(
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
$pdo = new PDO($dsn, $user, $pass, $opt);

そして、PHPエラーが表示されることを確認してください。だから、あなたは何が悪いのかを知るでしょう。

于 2013-02-07T09:44:04.337 に答える
1
$duedate = $_POST["duedate"];
$status = $_POST["status"];
$id = $_POST["id"];

try {
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = $pdo->prepare('UPDATE `pm_schedule` SET `duedate` = ?, `status` = ? WHERE `id` = ?');
    $sql->execute(array($duedate, $status, $id));
} catch(PDOException $e) {
    echo $e->getMessage();
}

PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTIONこれは、エラーを見つけるのに役立ちます

を使用するtryと、失敗する場所と理由のエラーメッセージをcatch受け取ることができます。echo

于 2013-02-07T09:35:45.137 に答える
0

これは、PDOを理解するための非常に優れたチュートリアルです。

そして正しい方法は次のとおりです。

// Named Placeholders
$sSql  = "UPDATE mytable SET FName = :FName, LName = :LName, Age = :Age, Gender = :Gender WHERE ID = :ID;";

// PDO prepared statement
$oSth = $oDbh->prepare($sSql);

// Bind Named Placeholders
$oSth->bindParam(":FName", $FName, PDO::PARAM_STR);
$oSth->bindParam(":LName", $LName, PDO::PARAM_STR);
$oSth->bindParam(":Age", $Age, PDO::PARAM_INT);
$oSth->bindParam(":Gender", $Gender, PDO::PARAM_STR);
$oSth->bindParam(":ID", $ID, PDO::PARAM_INT);

// Execute PDO with condition
if ($oSth->execute()) {
    // Get Affected row
    $iAffectedRows = $oSth->rowCount();
    $oSth->closeCursor();
    return $iAffectedRows;
} else {
    // PDO error, could also be caught in a try/catch statement
    $errorMsg = $oSth->errorInfo();
    error_log(json_encode($errorMsg));
}
于 2013-02-07T10:01:28.847 に答える