2012-04-10 9 views
0

私はMYSQLでPDOを使用しています。ときどきコードがinsert文を実行するとき。それは行っていない。このコードは機能しており、私の会社で過去8ヶ月間仕事をしていますが、今や特定の挿入文が失敗します。pdoは常にクエリを実行していません

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文1000年代を処理します。なぜそれがそれに与えられた挿入ステートメントを処理しないかについてのアイディアや推測は、高く評価されます。

ありがとうございます。

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

+0

あなたの2つの例は同じです。 –

+0

私はそれを固定言い訳。最初の関数は第2の関数を呼び出します – user1246035

+0

'update_sql'は何をしますか? – ManseUK

答えて

0

PDO::exec()によってスローされるPDOExceptionがないドキュメントを見て

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() returns false on failure

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(); 
} 

を交換してください - あなたはPDO::prepare()のためにドキュメントを見れば、それは明示的に

を語りますPDO :: prepare()はFALSEを返します。またはPDOExを出力します。コメントで@jeroenで述べたようにception

PDO::exec()

でこのありえない存在は - read this on how using exceptions works - あなたはPDO内取り扱うお使いのエラーがセットアップである方法を見てする必要があります。 PDO::ERRMODE_SILENTはデフォルトです - これは例外をスローしません

関連する問題