0

MYSQL で PDO を使用しています。コードが挿入ステートメントを実行する場合があります。進まないけど。このコードは、私の会社で過去 8 か月間機能しており、その仕事を行っていますが、現在、特定の挿入ステートメントが失敗しています。

public static function update($id,$table,$fields,$output=false,$pool = false){  

    $sql = "";

    if($pool){
        foreach($fields as $fields_single){
            $fields_id = 0;
            if(isset($fields_single["id"])) $fields_id=$fields_single["id"];
            $sql .= self::update_sql($fields_id,$table,$fields_single,$output)."; ";
        }

        return max($id,self::exec($sql));
    }else{
        $sql = self::update_sql($id,$table,$fields,$output);

        return max($id,self::exec($sql));
    }
}

私は適切なデバッグを行い、すべてが正しく関数に渡されています。

そして、ここにexec関数があります

public static function exec($query,$output=false){
    self::initialise();
    self::$query_count++;
    try{
        if($output) echo $query."<br /><br />";
        self::$db_connection->exec($query);
        return self::$db_connection->lastInsertId();
    } catch (PDOException $e) {
        print "Error!: " . $e->getMessage() . "<br/>";
        die();
    }
}

PDOException によってスローされるエラーはなく、毎日数千の SQL ステートメントを処理します。与えられた挿入ステートメントを処理しない理由についてのアイデアや推測をいただければ幸いです。

ありがとうございました。

また、lastInsertid() を実行すると、新しい ID を取得できますが、データベースには表示されません。

4

1 に答える 1

0

交換

try{
    if($output) echo $query."<br /><br />";
    self::$db_connection->exec($query);
    return self::$db_connection->lastInsertId();
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

if($output) echo $query."<br /><br />";
$count = self::$db_connection->exec($query);
if (!$count) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}
return self::$db_connection->lastInsertId();

PDO::exec()ドキュメントを見て失敗した場合は false を返します。PDOExceptionスローされるものはありませんPDO::exec()-ドキュメントを見ると、PDO::prepare()明示的に述べられています

PDO::prepare() が FALSE を返すか、PDOException を発行する

これは存在しませんPDO::exec()

コメントで @jeroen が指摘したように、PDO 内のエラー処理がどのように設定されているかを確認する必要があります。例外の使用方法については、こちらをお読みくださいPDO::ERRMODE_SILENTデフォルトです - これは例外をスローしません

于 2012-04-10T14:13:08.140 に答える